Вызывает ли View.removeAllViews() выпуск памяти?

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

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

Спасибо.

Ответ 1

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

Ответ 2

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

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

Отличные разговоры об этом можно найти на YouTube из Google IO 2011:

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

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