утечки памяти Android - PullRequest
       1

утечки памяти Android

3 голосов
/ 21 октября 2011

Я читал об утечках памяти в Android.В моем приложении я получаю java.lang.OutOfMemoryError: bitmap size exceeds VM budget исключение.Поиская в Google, я обнаружил, что это общая ошибка ( этот вопрос SO и этот вопрос SO касаются проблемы), и я использовал предложенное решение.
Я нашелофициальная документация Android , посвященная проблеме, и SO вопрос , объясняющий официальный пример.В этом примере говорится:

объект рисования имеет ссылку на TextView, который сам имеет ссылку на действие (Контекст), который, в свою очередь, имеет ссылки почти на что угодно

Я до сих пор не понимаю одну вещь: если Drawable не объявлен как статический, почему он не уничтожается в методе onDestroy() действия?Drawable уничтожается, TextView уничтожается, Activity уничтожается - нет ссылок и нет утечек памяти.Разве это не так, как это должно работать?

1 Ответ

2 голосов
/ 21 октября 2011

Я до сих пор не понимаю одну вещь: если Drawable не объявлен как статический, почему он не уничтожается в методе onDestroy () действия?Drawable уничтожается, TextView уничтожается, Activity уничтожается - нет ссылок и нет утечек памяти.Разве это не так, как это должно работать?

Да, именно так оно и должно работать, но они не могут быть немедленно уничтожены в onDestroy().Точное время работы сборщика мусора предсказать невозможно.Есть много вещей, которые вызывают это.Например, если вашему приложению не хватает разрешенной кучи памяти или если какое-то другое приложение пытается выделить больше памяти ...

Если вы хотите, чтобы ваше растровое изображение было немедленно уничтожено, вы должны вызвать Bitmap.recycle().

Как работает GC, и много другой полезной информации об управлении памятью в Android объясняется в этом видео:

http://www.youtube.com/watch?v=_CruQY55HOk

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