Android使用LruCache来缓存Bitmap

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zcpvn/article/details/80873672

Picasso为追求小而美,有功能取舍,比如,它无法支持下载动态图片。

如果你有这个需求,可以考虑使用Google的Glide或Facebook的Fresco。它们各有特点,Glide比较小巧,Fresco性能好。

上面的库都有缓存机制,如果自己实现的话,可以使用许多缓存机制使用一种叫作LRU(least recently used,最近最少使用)的存储策略。基于该种策略,当存储空间用尽时,缓存会自动清除最近最少使用的对象。

初始化LruCache来缓存Bitmap

LruCache<String, Bitmap> mLruCache;
 
    //获取手机最大内存,单位kb
    int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
    //一般都将1/8设为LruCache的最大缓存
    int cacheSize = maxMemory / 8;
 
    mLruCache = new LruCache<String, Bitmap>(maxMemory / 8) {
        /**
        * 这个方法从源码中看出来是设置已用缓存的计算方式的
        * 默认返回的值是 1,也就是每缓存一张图片就将已用缓存大小加 1
        * 缓存图片看的是占用的内存的大小,每张图片的占用内存也是不一样的
        * 因此要重写这个方法,手动将这里改为本次缓存的图片的大小
        */
        @Override
        protected int sizeOf(String key, Bitmap value) {
            return value.getByteCount() / 1024;
        }
    };

使用

 //加入缓存
    mLruCache.put("key", bitmap);
    //从缓存中读取
    Bitmap bitmap = mLruCache.get("key");

猜你喜欢

转载自blog.csdn.net/zcpvn/article/details/80873672