资源缓存 之 LruCache

493 查看

例如对 网络加载图片进行缓存 :

   //  得到 应用程序 被分配的最大的内存
        int maxMemory=(int) Runtime.getRuntime().maxMemory();
        // 取处内存的 1/5 用来当 缓存 大小
        int cachSize=maxMemory/5;
        // 实例化  LruCache
        lruCache=new lruCache<String, Bitmap>(cachSize){
            //内部方法sizeOf设置每一张图片的缓存大小
            protected int sizeOf(String key, Bitmap value) {
                //在每次存入缓存时调用,告诉系统这张缓存图片有多大
                // 相当于 为每次 要缓存的 资源 分配 大小空间
                return value.getByteCount();
            }
        };
          

上面的 代码 一般 放在初始化的 方法 里面
其实 可以将 LurCache 类 理解 为 Map 类 map 有 put和 get 方法

接下去就调用put 和 get 方法 进行需要缓存资源的存取

LurCache 的 add :

public void putBitmapToCache(String url,Bitmap bitmap){
        if (getBitmapfromCache(url)==null) {//判断当前缓存是否存在
            lruCache.put(url, bitmap);
        }
    }

LurCache 的 get:

public Bitmap getBitmapfromCache(String url){
        return lruCache.get(url);//可将lruCache看成map
    }

调用上面的 add 和 get 方法 就可以对资源进行缓存的 ,还是挺简单的,
但要注意一点 LruCache lruCache=new LruCache<String, Bitmap>(cachSize) 只能被new 一次 ,不然不同对象就不同的缓存了