ListView内存泄漏:无法回收列表元素(ImageView + Bitmap)

我有一个使用适配器来填充ImageView列表的ListView。 我遵循以下标准做法:

a)仅当convertView为空时才会膨胀新视图

b)如果convertView不为null,则使用viewHolder避免调用findViewById()

我还使用AsyncTask从数据库中填充ImageViews(如果可能,还可以从磁盘缓存或LRU内存缓存中填充)。

一切正常工作(即,图像填充在列表中平滑滚动),但我有一个泄漏,给大约70 x 1.4M图像加载后出现OOM错误。

我的理解是,当getView()返回一个非空的convertView时,ListView会被回收,所以我不应该看到像这样构建的内存。 就我而言,每次ImageView被分配一个Bitmap时,应用程序的内存使用量都会增加。 事实上,即使通过list.clear()清除了基础列表后,Activity仍保留在此内存中,并通过adapter.notifyDataSetInvalidated()清除了适配器 - 两者都在onStop()函数中。

MAT工具显示搁置的位图和搁浅的ImageViews(与加载的图像大约为1比1),但我不知道是什么保存了可阻止旧视图垃圾收集的引用。

我将不胜感激任何关于如何追踪此泄漏的建议。 谢谢!

链接地址: http://www.djcxy.com/p/67339.html

上一篇: ListView memory leak: not able to recycle list elements (ImageView + Bitmap)

下一篇: Android listview imageview in listitem gets hidden on scroll