2010-09-14 39 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