2010-09-14 74 views
2

嘿,我似乎有我的列表視圖有某種內存泄漏問題。列表視圖活動位於一個選項卡中,每行下載一個圖像並將其顯示在ImageView中(將其作爲backgroiund平鋪)。我正在使用類似於droidfu的緩存http://github.com/kaeppler/droid-fu/blob/master/src/main/java/com/github/droidfu/imageloader/ImageCache.javaListView內存泄漏?

一切似乎正常工作,因爲我完全清除內存緩存時,它獲得了超過20項,並且也完全清除磁盤緩存時,它獲得過去0.5MB只是爲了安全。當我在列表中有大量項目(比如說100)時,會出現問題,並且我會盡可能快地來回滾動此列表。最後,我在logcat中獲取這些信息:

堆按摩需要(59892字節外部分配太大)

完全GC(不收取SoftReferences)

從16.277MB

鉗目標GC堆到16.000MB

嘗試和修剪堆來源

完全GC(收集SoftReferences)

以及那些導致力量關閉的一大堆。我不太清楚問題是什麼或如何去解決它:S

謝謝!

以下是完整的日誌:http://pastebin.com/MghMdbxS

原來的問題是與正在創建太多的AsyncTask/Thread對象。我使用的代碼http://code.google.com/p/android-imagedownloader/和不知道如何得到這個固定的...

+1

你說有時他們強迫關閉....你可以通過這些崩潰的logcat輸出? – Cristian 2010-09-14 13:45:20

+0

這裏是:http://pastebin.com/MghMdbxS – Kman 2010-09-15 10:57:32

回答

0

一個很好的起點是:

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

這是一個有點複雜,獲取轉儲,但會給你有一個很好的時間點靜態分析。您將需要Eclipse的內存分析工具(MAT)也:

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

祝你好運!

+0

謝謝!有一個快速的外觀..當我得到時間將有一個去。 – Kman 2010-09-15 11:04:04

+0

Alrighty看起來好像有太多的AsyncTask對象正在創建...... 67個實例看着由MAT創建的報告。我正在使用http://code.google.com/p/android-imagedownloader/中的代碼使用AsyncTasks進行圖像下載。我如何限制它,以便只有一定數量的AsyncTasks可以被實例化或類似的東西? – Kman 2010-09-15 13:18:59

+0

這超出了「我的內存泄漏在哪裏」的原始問題,但考慮使用線程池而不是實例化許多AsyncTasks – Nate 2010-09-15 19:36:14