ListView包含许多图片缩略图

时间:2014-04-11 17:03:22

标签: android listview out-of-memory

我有一个包含许多行的ListView(大约200个)。

在ListView的每个项目中都有一个缩略图。

随着ListView滚动,图片将从互联网上下载。

问题在于,如果我快速滚动ListView,它会变得缓慢而且很快就会出现Out of Memory错误。

请您就如何避免这种做法提出建议?

3 个答案:

答案 0 :(得分:2)

在延迟加载时使用的自定义适配器上使用View Holder模式。

Lazy Loading使用Universal Image Loader。

OR

你可以给Picasso / Volley图书馆一个机会。他们可以为您有效地处理缓存。

答案 1 :(得分:1)

基本流程是使用缓存系统: 将图像下载到缓存目录 - >将其读回内存缓存 - >将其缩小(如果图像大于显示它的图像视图) - >在图像视图中显示它。

官方的Android培训有一个很棒的tutorial以及如何创建这样的东西的完整源代码 它们通过在用户滚动时暂停后台任务来解决滚动延迟的常见问题。

内存不足通过LruCache解决。

或者,您可以使用Universal Image Loader之类的第三方库来解决此问题。

答案 2 :(得分:1)

您必须处理视图回收。这是一个非常重要的性能问题,您应该始终处理它。

请参阅this post,它将指导您完成此过程,处理视图回收并使用查看持有人模式。还see this

回收意见的原因有很多:

  • 对象创建相对昂贵。创建的每个其他对象都需要由垃圾收集系统处理,并且至少会暂时增加内存占用;
  • 这对于更复杂的视图更为重要,但是扩展和布置视图对象可能很昂贵。大多数情况下,您只是对getView中的视图进行了一些小的更改,这些更改不会影响布局(例如,设置文本),因此您可以避免布局开销;
  • 请记住,android设计为在资源受限的环境中运行; 最后,它已经为你做了,它肯定没有伤害任何东西,所以为什么不使用它;

锄头可以帮到你。