Ответ 1
За исключением случаев, когда ваш код имеет ссылки на дочерние представления ViewGroup, все дочерние представления ViewGroup должны быть "мусорными коллекциями".
У меня возникло исключение OutOfMemory в моем коде, поэтому я просматриваю код.
У меня есть вопрос: может ли View.removeAllViews() освободить память, которая использовалась дочерними представлениями, которые ранее были добавлены в это родительское представление?
Спасибо.
За исключением случаев, когда ваш код имеет ссылки на дочерние представления ViewGroup, все дочерние представления ViewGroup должны быть "мусорными коллекциями".
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... "Что занимает моя память?"