Android——Lrucache内存缓存技术核心代码分析
2015-06-10 12:17
591 查看
以史为鉴
在过去,我们经常会使用一种非常流行的内存缓存技术的实现,即软引用或弱引用 (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方法中
相关文章推荐
- 通过intent意向书打开特点的activity
- 用XMPP实现完整Android聊天项目
- onActivityResult() 和onResume()的调用顺序问题
- androidstudio配置jvm内存大小
- Android Canvas的save(),saveLayer()和restore()浅谈
- android上传图片、视频、文件,服务端使用wcf接收
- android 保持session
- (转)Android Superuser提权漏洞分析
- Android 中各种权限深入体验及详解
- Android调用另一个程序的方法
- Android中获取apk基本信息
- 修改Android启动画面
- android Dialog给Activity 传参
- 方块大动员登陆iOS和Android平台,扫码就可立即体验超流畅的俄罗斯方块手游
- adb logcat命令查看并过滤android输出log
- androidの亮屏,灭屏,解锁广播使用
- Axure画Android原型
- eclipse查看Android系统源代码
- Android动画机制全解析
- Android 计时器