2012-05-06 3 views
5

Вот некоторые наблюдения управления памятью новичка, на которые я хотел бы ответить .Растровые изображения Android в xml-памяти утечки?

Похоже, что установка android: backgound = "@ drawable/xyz" в xml макет вызывает потерю памяти в моем приложении. Соответствующие действия сохраняют , пока я не получу ошибку OOM. Это особенно верно, если я поворачиваю ориентацию устройства.

Однако, если я загружаю тот же ресурс с помощью setBackgoundResource(), а затем очищаю обратный вызов и устанавливаем ссылку на фоновое изображение на нуль, утечки вообще нет.

, что, во-первых, в OnCreate()

mMainLayout.setBackgroundResource(R.drawable.background_general_android); 

, а затем в OnDestroy()

mMainLayout.getBackground().setCallback(null); 
mMainLayout.setBackgroundDrawable(null); 

Это примерно правильно, или я упускаю что-то важное?

+0

Я сталкиваюсь с такой же проблемой время от времени. Я попытаюсь управлять bitmap в onCrate и onDestroy. ty – guness

ответ

1

Это произойдет, только если вы сохраните копию чертежей в статическом кеше. Возможно, вы также протекаете ваши действия, а привязка чертежей к null просто скрывает проблему еще немного. Вы должны использовать инструмент, такой как MAT, для проверки содержимого вашей кучи и определения того, что происходит.

+1

Наблюдение выше основано на долгих и болезненных уик-эндах с MAT :) По сути, я сделал barebone-линейную компоновку с только растровым растровым изображением на 500 k, а также активность, которая ничего не делала, но загружала xml с помощью setContentView(). Когда битмап был установлен внутри xml => потеря памяти и OOM. При загрузке программно и с очисткой в ​​onDestroy() проблем нет. Однако я должен упомянуть, что остальная часть приложения, вне этой минимальной тестовой активности, довольно большая, что может повлиять на результаты. Я специально хотел протестировать его в «внутри реального приложения». Версия Android - 2,2 (уровень 8). – perza

Смежные вопросы