缓存位图 - Android

mir*_*gai 2 optimization mobile android image

我有一个ListView地方,每个单元格包含一个从互联网上下载的位图.为了避免内存不足错误,我想知道处理这个错误的最佳方法是什么.

我已经查看了位图的软参考,但我想知道如果我在当前活动中并且应用程序开始耗尽内存会发生什么.它如何决定回收哪些位图?

将文件写入磁盘并在需要时将其加载到内存中是一种更好的方法吗?有什么例子吗?

谢谢

Kni*_*edi 8

我刚才处理过.也表现了性能.这就是我得到的.
这个答案超出了图像的延迟加载,因为它处理性能.

首先:忘掉SoftReferencesandroid.由于不当行为(很快发布)对缓存非常不利.我最终使用LruCache(API <12的源代码),其缓存的字节大小固定.

通过网络加载图像时,您希望保留加载的图像(在私人应用程序数据文件夹或SD卡中).否则,用户被迫在每个应用启动时加载(不必要的)数据.这是例程:

  1. 请求图片
  2. 检查内存缓存中的图像(跳转到6.如果可用)
  3. 在本地持久化(如果是这样,跳转到5.)
  4. 从网络加载并持续存在
  5. 将位图加载到缓存中
  6. 将缓存中的位图加载到视图中

现在有一些表现的话.如果每个列表项都有另一个图像并且它们具有固定大小(例如40 x 40 dip),则在加载完整图像时会浪费高速缓存(例如800 x 600 px),并且您的设备必须计算很多用于缩放.

第一种解决方案是5.在将图像加载到缓存之前预先对位图进行预定标.当您持久保存缩放图像并在下次加载时,您将获得最佳性能.

您可以在我的CoverCache助手中找到一个示例(CD封面 - 但可以用于任何类型的图像数据).它同时处理图像的持久化,缩放和缓存.