我有一个ListView
其中每个单元格包含从互联网下载的位图。为了避免内存不足错误,我想知道处理这个问题的最好方法是什么。缓存位图 - Android
我已经看过位图的softreferences,但我想知道如果我在当前的活动和应用程序开始用尽内存会发生什么。它如何决定要回收的位图?
将文件写入磁盘并在需要时将其加载到内存中是一种更好的方法吗?有没有例子?
感谢
我有一个ListView
其中每个单元格包含从互联网下载的位图。为了避免内存不足错误,我想知道处理这个问题的最好方法是什么。缓存位图 - Android
我已经看过位图的softreferences,但我想知道如果我在当前的活动和应用程序开始用尽内存会发生什么。它如何决定要回收的位图?
将文件写入磁盘并在需要时将其加载到内存中是一种更好的方法吗?有没有例子?
感谢
我刚刚处理了一段时间。也用性能进行实验。这是我得到的。
此答案超出lazy loading of images,因为它涉及性能。
首先:在android上忘记SoftReferences
。由于行为不当(很快就会发布)对缓存非常不利。我结束了使用LruCache(source for API < 12)的缓存的固定字节大小。
当通过网络加载图片时,您希望持久加载的图片(在私人应用程序数据文件夹或SD卡中)。否则,用户将被迫在每次应用启动时加载(不必要的)数据。这里的例行:
现在说一些表现的话。如果每个列表项目都有另一个图像并且它们具有固定大小(例如40 x 40 dip
),那么当加载完整图像时(例如800 x 600 px
),您将浪费高速缓存内存,并且设备必须计算大量缩放比例。
第一种解决方案是在将图像加载到缓存之前在步骤5.
上对位图进行预分频。持续缩放图像并在下次加载时,您将获得最佳性能。
您可以在我的CoverCache助手(CD封面 - 但可用于任何类型的图像数据)中找到示例。它同时处理持续,缩放和缓存图像。
有很多实现与图像的延迟加载与通过convertView mecanism意见重用列表视图的。例如,看看这里:Lazy load of images in ListView
这里有很多解决方案。
检查此链接http://stackoverflow.com/questions/1919679/android-listiem-recycle-while-scroll-up-or-down和这一个也许虽然它是关闭http://stackoverflow.com/questions/541966/android-how-do-i-do-a-lazy-load-of-images-in-listview – 2012-01-27 17:01:03