LruCache缓存分析及使用

LruCache缓存分析及使用

内部实现原理:LinkedHashMap作为一个链表结构,在new LinkedHashMap<>(0,0.75f,true)时传入的第三个参数若为true(若为false则按照插入LinkedHashMap 的顺序进行排列)便可以将多次有过操作(put或是get)LinkedHashMap的键值对链接在LinkedHashMap的末端,对于之前的元素(即该键值对之前的键值对)进行裁剪判断(从LinkedHashMap的初始位置进行遍历做回收判断),在超过给定的内存大小或键值对的数量的条件限制下对其进行删除回收操作,已达到删除回收最近最少使用的元素的目的。

具体的步骤可以参看源码,注意sizeof方法如果不重写,则返回1,就是键值对的数量了。所以在使用中一般会像如下一样重写:

//获取系统分配给每个应用程序的最大内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();   

//取缓存大小,一般是总内存的1/8
int mCacheSize = maxMemory / 8;  

LruCache<String, Bitmap> mLruCache= new LruCache<String, Bitmap>(mCacheSize){  
    //重写此方法,来测量Bitmap的大小  
    @Override  
    protected int sizeOf(String key, Bitmap value) {  
        return value.getRowBytes() * value.getHeight();  
    }     
};

//添加Bitmap到内存缓存 
mLruCache.put(key, bitmap); //put进入的时候会返回当前键的旧值

//从内存缓存中获取一个Bitmap
Bitmap bitmap = mLruCache.get(key); //get 键key对应的Bitmap对象

//移除缓存
Bitmap bitmap = mLruCache.remove(key);//remove会返回key对应的值

//回收已经remove掉的bitmap,以释放内存空间
if (bitmap != null) 
     bitmap.recycle();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值