В моем приложении для Android каждый раз, когда я запускаю свое приложение, оно вылетает с OutOfMemory Exception - PullRequest
0 голосов
/ 24 августа 2010

У меня есть приложение для Android, которое в методе onCreate () предварительно загружает много графики.

Когда я тестирую свое приложение на HTC Aria и запускаю его, оно работает нормально. Однако, если я нажимаю кнопку «Назад», чтобы закрыть свое приложение, а затем снова запустить приложение, оно завершается с OutOfMemoryError: размер растрового изображения превышает бюджет виртуальной машины. Если я запускаю приложение в третий раз (сразу после его сбоя), оно запускается нормально. Затем, если я закрою и перезапущу его, он снова вылетает с нехваткой памяти. Это продолжит этот паттерн каждый другой раз навсегда, если я продолжу пытаться.

Я проверил, какие методы жизненного цикла вызывались, и onStop () и onDestroy () оба вызываются, когда я выхожу из приложения, но у меня есть ощущение, что что-то еще не очищается и что происходит "сбой" "приложение, когда я пытаюсь запустить его во второй раз, освобождает память.

Есть мысли о том, что может происходить или как это исправить? Пожалуйста, дайте мне знать, если вы хотите, чтобы я опубликовал дополнительную информацию. Спасибо!

Информация:
Мое приложение довольно простое и имеет только 1 действие, которое воспроизводит некоторые кадры анимации.

Ответы [ 3 ]

2 голосов
/ 24 августа 2010

Может быть, вы излишне держитесь за ссылки на контекст? Проверьте Предотвращение утечек памяти для некоторых советов, а также Атакующие проблемы с памятью .

0 голосов
/ 24 августа 2010

Вы можете найти некоторую полезную информацию во многих ответах на этот вопрос: Странно нехватка памяти при загрузке изображения в растровый объект

Кроме того, я повторяю «Избегание утечек памяти»" Сообщение блога.Особенно, если вы можете вызвать ту же проблему с изменением ориентации.Использование контекста «this» при создании экранных объектов является хитрым способом утечки контекста Activity.В моем собственном приложении мне удалось вытечь целую цепочку контекстов, и мне очень быстро не хватило бы памяти при изменении ориентации.

0 голосов
/ 24 августа 2010

Похоже, что-то в жизненном цикле Деятельности не совсем правильно. Вы уверены, что у вас есть каждый старт? http://developer.android.com/reference/android/app/Activity.html

У вас есть onStop, но у вас есть onDestroy? Возможно, вам не хватает одного из тех, которые вам нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...