Bitmap高效缓存(二) LruCache类实现缓存图片到内存

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

上一节通过使用BitmapFactory的Options类进行图片的压缩来实现图片加载优化。但是同一资源如果要进行频繁的访问,显然每一次都从网络上下载资源显然是不合理的,所以要用到缓存机制。将网络资源下载后放到本地或内存,之后就可以直接获取本地资源而不用下载资源。

方法二 LruCache类实现缓存图片到内存

LRU算法是近期最少使用算法,普遍应用在操作系统的内存管理上。当存储空间满了之后,它会删除最久未使用的资源从而腾出存储空间。
LruCache是Android3.1提供的一个缓存类,将缓存存放在LinkedHashMap中。LinkedHashMap按照使用时间进行排序,当缓存满了之后删除最后一个缓存,即最久未使用的缓存。
LruCache提供了get()和put()请求使得缓存方法更加方便简单。

使用方法
  • 构造一个LruCache对象
public LruCache<String, Bitmap> mLrucache;
int maxSize = (int) (Runtime.getRuntime().maxMemory() / 8);
mLrucache = new LruCache<String, Bitmap>(maxSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount();
            }
        };

maxSize为确定缓存的最大容量,一般为内存的1/8;sizeof方法确定每个图片的大小。

  • put()方法将对应文件放入LinkedHashMap中,一般用于资源不存在第一次加载之后
private void putBitmapToCache(Bitmap bitmap, String url) {
        if(bitmap != null) {
            mLrucache.put(url, bitmap);
        }
    }
  • get()方法检查内存中是否有该资源,如果存在返回该资源
private Bitmap getBitmapFromCache(String url) {
        if(url != null) {
            if(mLrucache.get(url) != null) {
                return mLrucache.get(url);
            }
            return null;
        }
        return null;
    }

上一节 Bitmap高效缓存(一) 利用BitmapFactory的Options类压缩位图

猜你喜欢

转载自blog.csdn.net/l1832876815/article/details/85316234