【Android框架】深入浅出理解DiskLruCache(上)
来源:互联网 发布:mac美服lol加速器 编辑:程序博客网 时间:2024/05/21 11:02
什么是DiskLruCache?
简单来说,DiskLruCache是一种管理数据存储的技术,单从Cache的字面意思也可以理解到,”Cache”,”高速缓存”。在很多我们接触的APP中,大多数APP是利用了这一技术的,例如:微博,网易新闻,QQ等等。当无网络时,打开这类APP时,是不能接收网络数据的,但是你会发现无网络状态依然可以浏览到离线的数据,而这些离线的数据都是在有网络的情况下保存下来的,而这其中就涉及到DiskLruCache。
LruCache和DiskLruCache
LruCache和DiskLruCache两者都是利用到LRU算法(下一篇博客会做讲解),通过LRU算法对缓存进行管理,以最近最少使用作为管理的依据,删除最近最少使用的数据,保留最近最常用的数据。LruCache运用于内存缓存,而DiskLruCache是存储设备缓存。
为什么要使用DiskLruCache技术呢?
首先我们必须要了解到,离线数据存在的意义,当无网络或者是网络状况不好时,APP依然具备部分功能是一种很好的用户体验,假设网易新闻这类新闻客户端,数据完全存储在缓存中而不使用DiskLruCache技术存储,那么当客户端被销毁,缓存被释放,意味着再次打开APP将是一片空白,另外DiskLruCache技术也可为新闻客户端的“离线阅读”这一功能做技术支持。
DiskLruCache的存储路径是哪里?
DiskLruCache的存储路径是可以自定义的,不过也可以是默认的存储路径,而默认的存储路径一般是这样的:/sdcard/Android/data/包名/cache 。包名是指APP的包名。我们可以在手机上打开,浏览这一路径。
关于DiskLruCache的实现
先来看看DiskLruCache的构造方法,主要传入四个参数:File对象(其中File对象中包含文件路径等信息),app对应版本,Key对应的文件数,最后是大小限制。
DiskLruCache的存储open操作源码
创建DiskLruCache实例可以用 open方法。其中调用参数如上解释。
对于上述四个参数有对应的获取方法,如下:
相关参数的获取方法
File对象的获取,如下:
AppVersion的获取
ValuesCount是Key所对应的文件数,我们通常选择一一对应的简单关系,这样比较方便控制,当然我们也可以一对多的关系,通常写入1,表示一一对应的关系。
maxSize用来表示最大可以缓存多少字节的数据。
关于DiskLruCache的实现算法LRU
LRU是Least Recently Used的缩写,即最近最少使用,常用于页面置换算法,是为虚拟页式存储管理服务的。
通过数据的历史访问记录,来辨别数据的使用频率,使用频率高的,说明被使用的概率就高,同样,使用频率低,意味着被使用概率低。这样对数据进行清理,清理掉使用概率低的数据。LRU算法博客:LRU算法
如何使用DiskLruCache存储数据?
这里我们以浏览网络图片为例:以一个图片Url路径,下载对应网络图片。这个时候需要对图片设定所属Key,原本可以图片的网络路径为Key,但是这样的数据缺乏安全性,所以我们将网络路径加密,所得结果作为该图片的Key。
写缓存的实现
写入缓存的操作是DiskLruCache.Editor这个类实现的。这里将操作放在线程中。
读取缓存的实现
读取缓存的操作是DiskLruCache的get()方法。
清除缓存的实现
实际上,DiskLruCache是本身具备管理缓存的能力的,LRU算法就是对数据的管理,移除多余数据(最少访问或调用)。不过,这里还是有手动移除缓存这个方法:
DiskLruCache下载
DiskLruCache源码:http://download.csdn.net/detail/u011669081/9533686
- 【Android框架】深入浅出理解DiskLruCache(上)
- 【Android框架】深入浅出理解DiskLruCache(下)
- Android缓存框架 DiskLruCache
- 深入浅出RPC框架(上)
- 深入浅出的理解Android网络请求框架
- 深入浅出的理解框架
- 粗线条的理解android中的DiskLruCache类
- Android DiskLruCache
- Android-DiskLruCache
- Android LruCache和DiskLruCache相结合打造图片加载框架(仿微信图片选择,照片墙)
- 【Android开发】深入理解硬盘缓存类DiskLruCache:源码分析
- Android DiskLruCache框架解析,硬盘加载图片到缓存
- Android二级缓存之物理存储介质上的缓存DiskLruCache
- DiskLruCache理解使用心得
- Android之DiskLruCache(缓存工具)
- Android (DiskLruCache)硬盘缓存代码实现
- Android 缓存浅谈(二) DiskLruCache
- Android缓存源码分析(DiskLruCache,LruCache)
- 正则表达式在文本过滤中的使用
- 比例矩形RatioLayout
- Mysql常用命令行大全
- MyBatis
- 第十四周项目2.1 两个成员的类模板 (1)
- 【Android框架】深入浅出理解DiskLruCache(上)
- ListView读取屏幕上当前可见Item的索引
- Codeforces Round #319 (Div. 2) C Vasya and Petya's Game
- 程序是怎么跑起来的-2
- Security使用技巧
- OpenGL学习脚印: 模型变换(model transformation)
- 第十四周项目 2.2 两个成员的类模板 (2)
- 数列的收敛
- 高频面试题之三种方法实现两个栈实现一个队列