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 mLruCache= new LruCache(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();

你可能感兴趣的:(android开发)