Android:二级图像缓存

在移动世界中,具有包含信息和一幅或两幅图像的可滚动项目列表是非常普遍的。 为了使这些列表具有良好的性能,大多数应用程序都遵循延迟加载的方法,该方法只是捕获并显示这些类型的列表中的图像。

这种方法非常适合将图像最初放入系统中。 但是,这种方法仍然存在一些问题。 每当图像需要在列表中向用户显示时,应用程序必须重新下载每个图像。

这给用户带来了非常糟糕的体验。 用户首次看到该列表时,他/她必须等待几秒钟(或网络连接不佳的几分钟),然后才能看到包含图像的完整列表。 但是,当用户滚动到列表的其他部分然后向后滚动时,真正的痛苦就来了。 此操作将导致整个图像下载过程重新启动!

我们可以通过使用图像缓存来消除负面的用户体验。
图像缓存使我们能够将最近下载的图像存储在设备上。 通过将它们存储在设备上,我们可以从内存中获取它们,而不必再次向服务器询问它们。 这可以通过几种不同的方式来节省我们的性能,最值得注意的是:

  • 已下载的图像几乎立即显示,这使UI更加清晰
  • 无需连接网络即可保存图像,从而节省了电池寿命

使用缓存时有一些设计注意事项。 由于缓存正在使用设备上的内存,因此其空间相当有限。 这意味着我们只能在缓存中保存一定数量的图像,因此确保将正确的图像存储在其中非常重要。 “正确”是一个非常相对的术语,根据即将发生的问题,它可能表示几项不同的内容。 如您在这里看到的,有几种不同类型的缓存算法试图为不同的问题定义“正确的”。 在我们的例子中,“正确”表示我们想要在缓存中使用最多的图像。

对我们来说幸运的是,我们需要的缓存类型很简单,也是最常用的缓存之一。 LRU缓存将最常使用的图像保留在内存中,而丢弃最不使用的图像。 甚至更幸运的是,Android SDK具有LRUCache实现,该实现已添加到Honey Comb中(如果您还需要支持较旧的版本,它也可以在支持库中获得 )。

使用磁盘上存储的LRUCache

LRU缓存使您可以将图像保存在内存中,而不必每次都访问服务器。 这使您的应用可以更快地响应更改并节省电池寿命。 缓存的限制之一是可用于实际存储图像的内存量。 这个空间非常有限,尤其是在移动设备上。

但是,您确实可以访问一个具有更大空间的数据存储:磁盘。

移动设备上的磁盘通常比主内存大得多。 尽管磁盘访问比主存储器要慢得多,但它仍然比通过网络访问映像要快得多,并且通过不访问网络仍然可以节省电池寿命。

对于出色的Disk LRU Cache实现,该实现可与Android 完美配合,请在GitHub上查看Jake Wharton的DiskLRUCache

组合内存和磁盘缓存

尽管以前的两个高速缓存(内存LRUCache和磁盘LRUCache)都可以独立良好地工作,但结合使用时,它们可以更好地工作。 通过同时使用两个缓存,您将获得两全其美的效果:

  • 增加了主内存缓存的加载速度
  • 磁盘缓存增加了缓存大小

结合两个缓存非常简单。

Google 在此处为内存和磁盘缓存提供了一些出色的示例代码。 您现在要做的就是采用两种不同的缓存实现,并使用上述流程图将它们放在一起,以在Android中创建2级图像缓存!

参考: Programming Mobile博客上的JCG合作伙伴 Isaac Taylor 引用 了Android中的二级图像缓存


翻译自: https://www.javacodegeeks.com/2012/09/android-level-two-image-cache.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值