Освобождает ли View.removeAllViews () память? - PullRequest
12 голосов
/ 25 февраля 2010

Я столкнулся с исключением OutOfMemory в своем коде, поэтому я проверяю код.

У меня есть вопрос, освобождает ли View.removeAllViews () память, которая использовалась дочерними представлениями, которые ранее были добавлены в это родительское представление?

Спасибо.

Ответы [ 2 ]

7 голосов
/ 14 июня 2011

View.removeAllViews () может освободить представления и запланировать их для сборки мусора (что может произойти позже), однако у вас все еще может быть проблема, поскольку @drawables в XML или в вашем коде с помощью getDrawable () могут все еще потребляют память.

Я много боролся с ошибками OutOfMemory и обнаружил, что самой большой проблемой является не XML-формат или объекты View, а загружаемые ими Drawables и ресурсы (или я загрузил их для присоединения к ним).

Большой разговор об этом можно найти на YouTube в Google IO 2011:

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

В этом выступлении рассказывается об использовании Eclipse MAT (Инструмент анализа памяти) для устранения исключений OutOfMemory. Я предлагаю это, потому что вы упоминаете, что просматриваете код, и лучшее место, где можно начать искать ошибку OutOfMemory, это ... "что занимает мою память?"

6 голосов
/ 25 февраля 2010

За исключением случаев, когда в вашем коде есть ссылки на дочерние представления ViewGroup, все дочерние представления ViewGroup должны быть "собираемыми мусором".

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