Android中的缓存策略

26 篇文章 0 订阅

三级缓存

当内存中不存在该图片时从存储设备中加载,当存储设备中也不存在该图片时从网络中去获取。
缓存一般要包含添加 获取 删除三类操作。
LruCache (Least Recently Used 最近最少使用算法,内存缓存),DiskLruCache(存储缓存)。

LruCache

LruCache缓存用于实现内存缓存。
LruCache是Android3.1提供的一个缓存类(泛型类),其内部采用LinkedHashMap以强引用的方式存储缓存对象,其提供get,put方法完成缓存的获取及添加。
        强引用:直接的对象引用
   软引用:若对象只有软引用,系统内存不足时此对象会被gc回收。
弱引用:若对象只有弱引用,此对象随时会被gc回收。
此外LruCache是线程安全的,使用时不必考虑同步问题。
使用:
LruCache<String , Bitmap> ACache=new LruCache<String, Bitmap>((int) (Runtime.getRuntime().maxMemory()/(1024*1024)/5)){
@Override
protected int sizeOf(String key, Bitmap value) {
        return value.getRowBytes()*value.getHeight()/(1024*1024);
   }
@Override
protected void entryRemoved(boolean evicted, String key,
        Bitmap oldValue, Bitmap newValue) {
        super.entryRemoved(evicted, key, oldValue, newValue);
   }
};


其中只需要重写sizeOf(返回bitmap的大小),跟entryRemoved(删除bitmap)方法。当然也可以自定义类。
注意bitmap的存储是以键值对的形式存储,获取,存放,删除形式如下:
ACache.put("bitmap", null);
ACache.get("bitmap");
ACache.remove("bitmap");


DiskLruCache

DiskLruCache用于实现存储设备缓存。通过将存储对象写入文件系统实现缓存。
其并非android SDK内容,这里不做介绍。

缓存工具类推荐

Picasso.jar其内部实现也是采用三级缓存。使用起来如下:
Picasso.with(mContext).load(path)
.resize(DimenUtil.dpToPx(mContext, 76),DimenUtil.dpToPx(mContext, 76))
.into(imageView);


注意:在加载图片遇到卡顿现象时,多考虑异步任务去执行耗时操作。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值