使用ListView内存不足

时间:2012-03-28 07:16:13

标签: android out-of-memory

我对OOM概念非常熟悉。我在这里遇到了很多问题,我知道这听起来像是对OOM的重复问题,但我现在有一个不同的问题。

我有数百个图像,我必须在单个ListView中的单个Activity中显示这些图像。

我已经使用了Fedor的延迟加载概念。

当图像很小(类似于50-100张图像)时,代码工作正常,但如果我得到大约200到300张图像,一旦用户滚动ListView(最终)我我得到一个内存不足的例外。

我在开发者网站中使用了有效的Adapter概念,如here所示,我相信这是最好的自定义适配器使用方法。

到目前为止,我所看到的所有建议都是基于通过缩放或其他方式减少位图大小。我已经尝试过这些方法了。但OOM仍然会在某个时间点发生。

降低图像质量看起来不像处理此异常的方式,因为这似乎会影响用户体验,而且它也不适用于大量的位图。

我的问题是:

  1. 如何在不面对OOM的情况下在单个n中显示ListView张图片?
  2. 在这种情况下,最好的策略是什么?
  3. 是否可以在一个ListView中显示约500张图片?
  4. 非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

  1. 查看googles shelfproject。
  2. Shelvesproject执行以下操作:在加载图像时使用占位符图像,使用弱引用来存储图像,使用清除更新延迟处理程序。
  3. 是和否,可以使用这么多项目的列表视图,但不可能同时在内存中包含这么多图像。

答案 1 :(得分:0)

在将此API级别放置在应用程序堆中之前,请尝试使用API​​ Level 11+映像。是的,可以使列表视图具有500个图像并且工作流畅(例如,联系人应用程序)。

这个http://code.google.com/p/android-imagedownloader/可以帮助您获取图像,缓存和回收它们。