Android——Lrucache内存缓存技术核心代码分析

以史为鉴

在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (SoftReference or WeakReference)。

但是现在已经不再推荐使用这种方式了,因为从 Android 2.3 (API Level 9)开始,垃圾回收器会更倾向于回收持有软引用或弱引用的对象,这让软引用和弱引用变得不再可靠。

另外,Android 3.0 (API Level 11)中,图片的数据会存储在本地的内存当中,因而无法用一种可预见的方式将其释放,这就有潜在的风险造成应用程序的内存溢出并崩溃。


为了避免内存溢出的风险,同时又能快速的访问到图片,Lrucache内存缓存技术应运而生。


Lrucache简介

Google的package android.util.LruCache类为我们提够一个好用的内存缓存技术,非常适合用来缓存图片,可以让组件快速地重新加载和处理图片等资源不过考虑到兼容性,最好导入android.support.v4.util.LruCache这个类。

但LruCache只是管理了内存中图片的存储与释放,如果图片从内存中被移除的话,那么又需要从网络上重新加载一次图片,这显然非常耗时。对此,Google又提供了一套硬盘缓存的解决方案:DiskLruCache(非Google官方编写,但获得官方认证)。


Lrucache核心源码

LruCache使用LinkedHashMap实现内存的缓存,没有软引用,都是强引用。
主要需要了解两个变量size和maxSize。

size:用来计算已经缓存的资源的存储大小
maxSize:规定最大的存储大小


put方法:将资源文件以键值对的方式添加到LinkedHashMap中
  计算缓存size的大小,并判断是否达到最大限制



get方法:如果缓存中存在key对应的value,直接返回value。不存在则尝试创建一个value,并把它加入到map中
创建value需要花费时间,而这段时间,key对应的value可能已被赋值。那么我们创建的value值就没有
存在的意义了。




主要原理在trimToSize方法中



















评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值