LruCache详解

引入:我们知道图片加载时耗时且耗流量的,如果我们每次都从网络中去获取图片,那么必然响应速度和体验效果是极差的。为了解决该问题,我们引入了缓存,即将图片缓存起来,以便下一次直接从缓存中取,而不用再从网络中去取了。缓存一般分为内存缓存和存储设备缓存。通常情况下,我们去加载一张图片时,会先从内存中获取,若内存中不存在,再从存储设备中去获取,若还是不存在,最后从网络中获取。

LruCache的缓存算法

LruCache采用的缓存算法为LRU(Least Recently Used),最近最少使用算法。核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。

LruCache的实现:

LruCache是一个泛型类,它内部采用了一个LinkedHashMap以强引用的方式存储外界的缓存对象,其提供get和put方法来完成缓存的获取和添加。

public class LruCache<K, V>{
    private final LinkedHashMap<K, V> map;
    ....
}

LruCache是线程安全的,因此是可以采用多线程并发处理。

创建LruCache:

        //获取到应用的最大内存
        int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
        //设置LruCache的缓存大小
        int cacheSize = maxMemory / 8;
        //重写sizeOf,并返回以kB为单位的缓存对象的大小
        mMemoryCache = new LruCache<String, Bitmap>(cacheSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes() * value.getHeight() / 1024;
            }
        };

使用LruCache:

//获取到缓存对象
mMemoryCache.get(key);
//添加缓存对象
mMemoryCache.put(key,value);

LruCache源码详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容