Я разработал приложение, которое использует много изображений на Android.
Выполнение приложения однажды, заполняет информацию об экране (Layouts
, Listviews
, Textviews
, ImageViews
, и т.д.), и пользователь читает информацию.
Нет никакой анимации, никаких специальных эффектов или чего-либо, что может заполнить память. Иногда drawables может измениться. Некоторые - ресурсы андроида, и некоторые - файлы, сохраненные в папке в SDCARD.
Затем пользовательские выходы ( onDestroy
метод выполняется, и приложение остается в памяти VM), и затем в какой-то момент пользователь входит снова.
Каждый раз, когда пользователь входит в приложение, я вижу, что память растет все больше, пока пользователь не добирается java.lang.OutOfMemoryError
.
Таким образом, что лучший/корректный путь состоит в том, чтобы обработать много изображений?
Я должен поместить их в статические методы, таким образом, они не загружаются все время? Я должен убрать расположение или изображения, используемые в расположении специальным способом?
Похоже, у вас утечка памяти. Проблема не в обработке большого количества изображений, а в том, что ваши изображения не освобождаются, когда ваша активность уничтожается.
Трудно сказать, почему это происходит, не глядя на ваш код. Однако в этой статье есть несколько советов, которые могут помочь:
http://android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html
В частности, использование статических переменных может сделать дела обстоят хуже, а не лучше. Возможно, вам потребуется добавить код, который удаляет обратные вызовы при перерисовке приложения - но опять же, здесь недостаточно информации, чтобы сказать наверняка.
Я столкнулся именно с этой проблемой. Куча довольно маленькая, поэтому эти образы могут довольно быстро выйти из-под контроля в отношении памяти. Один из способов - дать мусорщику подсказку собрать память на растровой карте, вызвав его метод рециркуляции . Также не гарантируется, что метод onDestroy будет вызван. Возможно, вы захотите перенести эту логику/цикл вверх в активность onPause. Для получения дополнительной информации ознакомьтесь с диаграммой/таблицей жизненного цикла активности на этой странице .
.