DiskCache

本文深入解析Android中的磁盘缓存技术DiskCache,包括其不同种类如DiskLruCache、LimitedAgeDiskCache及UnLimitedDiskCache的特点与使用方法,并重点介绍了DiskLruCache的工作原理和API。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DiskCache


基本概念

DiskCache,故名思义,即磁盘缓存,与内存缓存对应,是Android应用缓存技术的重要一项,优点磁盘缓存存储时间长,存储空间相对UnLimited,缓存逻辑上(from UIL)主要分为DiskLruCache,LimitedAgeDiskCache,UnLimitedDiskCache。其中DiskLruCache是使用最多,最为经典的,出自大神JakeWharton。LRU存储结构还是基于链表结构的LinkedHashMap。

LimitedAgeDiskCache & UnLimitedDiskCache

  • UnLimitedDiskCache因为没有缓存管理逻辑,只要通过缓存uri实现相应的get(),save(),remove(),clear(),getCacheDirectory()即可
  • LimitedAgeDiskCache限制了缓存对象最长存活周期的磁盘缓存, 内部管理一个HashMap<File, Long>, save()时存储当前时间作为对象的创建时间,get()时判断如果当前缓存对象存活时间已经超过设置的最长时间,则删除。

DiskLruCache

限制总字节大小的内存缓存,会在缓存满时优先删除最近最少使用的元素。LinkedHashMap<String, Entry>(0, 0.75f, true)。几个重要参数:
存储路径 appVersion, 当版本号改变,DiskLruCache会清除缓存路径下存储的所有数据 valueCount指的是LinkedHashMap每一个entry的存储数目,默认为1即可 cache最大的存储size(bytes),maxSize cache最大的存储文件数目,maxFileCount,同时缓存目录下会有一个journal的文件记录缓存的所有操作。
DiskLruCache是不能new出实例的,如果我们要创建实例,需要调用它的open()方法,open方法接收五个参数,如上面所示。操作DiskLruCache主要有:

  • 写入缓存,写入的操作是借助DiskLruCache.Editor这个类完成,调用edit(key)方法获得,再调用它的newOutputStream()方法来创建一个输出流,输入index为0,与valueCount对应
  • 读取缓存,依赖DiskLruCache.Snapshot类,snapShot = mDiskLruCache.get(key); InputStream is = snapShot.getInputStream(0)获得文件的输入流
  • 移除缓存,mDiskLruCache.remove(key); 当然DiskLruCache会根据我们在调用open()方法时设定的缓存最大值来自动删除多余的缓存,只有我们确定缓存已过期时会调用remove()方法
  • 其他API: size(),flush()(用来同步journal文件,比较标准的做法就是在Activity的onPause()方法中去调用一次flush()方法),close()(通常只应该在Activity的onDestroy()方法中去调用close()方法),delete()(全部删除缓存)
  • journal,DiskLruCache能够正常工作的前提就是要依赖于journal文件中的内容

DiskLruCache Sample

DiskLruCacheDemo


参考链接:
1. http://blog.youkuaiyun.com/guolin_blog/article/details/28863651
2. http://blog.youkuaiyun.com/fangzhibin4712/article/details/38823533
3. http://blog.youkuaiyun.com/i_lovefish/article/details/8220077

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值