2010-09-14 2 views
2

Эй, похоже, у меня есть проблема с утечкой памяти с моим списком. Активность просмотра списка находится на вкладке, и каждая строка загружает изображение и отображает его в ImageView (разбирая его как backgroiund). Я использую кеш, похожий на droidfu. http://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/imageloader/ImageCache.javaОшибка ListView памяти?

Все работает нормально, поскольку я полностью очищаю кеш памяти, когда он получает 20 элементов, а также полностью очищает кеш диска, когда он достигает 0,5 МБ, чтобы быть в безопасности , Проблема возникает, когда у меня есть большой список элементов в списке (скажем, 100), и я продолжаю прокручивать назад и вперед этот список как можно быстрее. В конце концов, я получаю эти сообщения в LogCat:

Heap Массаж необходим (59892 байт, внешнее распределение слишком большой)

Full GC (не собирают SoftReferences)

Зажим целевой GC кучи из 16.277MB в 16.000MB

Попробуйте обрезать Heap Источник

Full GC (сбор SoftReferences)

И целая куча тех, которые ведут к силе. Я не слишком уверен, в чем проблема или как это сделать: S

Спасибо!

Вот полный лог: http://pastebin.com/MghMdbxS

Оказывается, его проблема с слишком много объектов AsyncTask/темы создается. Я использую код из http://code.google.com/p/android-imagedownloader/ и не уверен, как получить это фиксированный ...

+1

Вы сказали, что иногда они принудительно закрываются .... можете ли вы пройти выходные данные этих аварий? – Cristian

+0

вот он: http://pastebin.com/MghMdbxS – Kman

ответ

0

Хорошее место для начала:

http://kohlerm.blogspot.com/2009/04/analyzing-memory-usage-off-your-android.html

Это небольшой комплекс, чтобы получить дамп, но даст вы хороший статический анализ времени. Вы будете нуждаться в памяти инструмента для Eclipse анализа (MAT) также:

http://www.eclipse.org/mat/

Удачи!

+0

спасибо! имел быстрый взгляд ... будет идти на это, когда я получаю время. – Kman

+0

Alrighty выглядит так, что создается слишком много объектов AsyncTask ... 67 экземпляров, рассматривающих отчет, созданный MAT. Я использую код здесь http://code.google.com/p/android-imagedownloader/ для загрузки изображений с помощью AsyncTasks. Как ограничить его, чтобы можно было создать экземпляр только определенного количества AsyncTasks или что-то в этом роде? – Kman

+0

Это выходит за рамки первоначального вопроса «где моя утечка памяти», но рассмотрите возможность использования пула потоков вместо создания экземпляров многих AsyncTasks – Nate

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