android公平缓存管理,Android中的缓存策略

缓存分为:内存缓存+存储设备缓存,在Android中对应:LruCache+DiskLruCache.

首先,LruCache(实现原理为LinkedHashMap)是3.1以后加入的一个api,可以使用v4包兼容至2.2版本。

LruCache(线程安全)内部是一个LinkedHashMap以强引用的方式存储外界的缓存对象。

强引用:直接的对象引用。

软应用:当一个对象只有软应用存在时,系统内存不足时此对象会被gc回收。

弱引用:当一个对象只有弱引用存在时,此对象会随时被回收。

DiskLruCache(创建、缓存添加、缓存查找)

1.创建

使用DisLruCache.open(File directory,inter appVersion,int valueCount,long maxSize)方法

- directory:缓存路径,如果想跟随应用被卸载而删除,请选择/sdcard/Android/data/package_name/cache

- appVersion:版本号,一般填 1,如果升级为2时,缓存会被清除(开发时没必要清除缓存)。

- valueCount:单个节点所对应的数据个数。一般为1。

- maxSize:缓存总大小,注意单位为字节。

2.缓存添加

缓存添加时通过Editor(和sharedPreference相似)完成。

图片缓存:

- 获取图片url所对应的key(采用url的md5值作为key)

- DiskLruCache.Editor editor = DiskLruCache.editor(key);

- OUtputStream outputStream = editor.newOutputStream(DISK_CACHE_INDEX);因为一个节点只有一个数据,故DISK_CACHE_INDEX = 0;

- 通过流将图片写入到文件中

- 调用editor.commit()方法提交写操作。

注意:写入完成后,记得关闭流。

3.缓存查找

- 通过url得到key,通过DiskLruCache.get(key)得到一个Snapshot对象

- 通过Snapshot对象可以得到缓存的输入流,就能得到bitmap了。

注意:这里bitmap要考虑OOM的问题,所以要进行缩放,但是文件输入流因为是优秀的文件流,所以不能两次调用decodeStream(第二次会为null),所以要通过文件流获取文件描述符,然后再通过BitmapFactory.decodeFileDescriptor方法加载缩放后的图片。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值