内存缓存与LruCache

内存缓存

  • 1.内存缓存的核心:
    • 存:就有很多的考虑
    • 取:只需要知道唯一的key就可以了
  • 2.选择什么样的存储结构/容器/集合?Map

LruCache的使用:

一个工具方法,提供了基于Lru缓存策略强引用的内存缓存,存储结构使用的LinkedHashmap

  • LinkedHashmap使用

    • LinkedHashmap和Hashmap区别:在构造方法里面多了3个参数
    • 3个参数的意义:
      • initialCapacity:初始化容器大小 16
      • loadFactor:负载因子
      • accessOrder:
        • true:LinkedHash内部会排序–>按照访问顺序排序–>这个也是为什么LruCache使用LinkedHashmap做存储结构的原因
        • false:按照插入顺序去排序
  • LruCache在什么地方可以找到?

    • 在高版本的sdk里面有.
    • 在v4包中有提供.
  • LruCache的使用
    1. 告知缓存的具体大小
    2. 覆写sizeOf方法,具体大小需要和我们定义的maxsize单位统一

LruCache的使用Demo(与Volley的ImageCache结合):

package com.lqr.myvolleydemo;

import android.graphics.Bitmap;
import android.support.v4.util.LruCache;

import com.android.volley.toolbox.ImageLoader.ImageCache;

/**
 * @author CSDN_LQR
 * @工程 MyVolleyDemo
 * @包名 com.lqr.myvolleydemo
 * @TODO 使用LruCache自定义的缓存类
 */
public class MyImageCache implements ImageCache {
    LruCache mLruCache;

    // 存储结构/容器/集合缓存的最大值
    // 1.告知缓存的具体大小
    // private int maxSize = 5 ;// 5m
    private int maxSize = 5 * 1024 * 1024;// 5242880byte

    public MyImageCache() {
        mLruCache = new LruCache(maxSize) {
            // 2.覆写sizeOf方法(用于计算每张图片的大小)
            @Override
            protected int sizeOf(String key, Bitmap value) {
                // return super.sizeOf(key, value);//默认返回1

                // 返回每一个entry对应的大小
                // 具体大小需要和我们定义的maxSize单位统一
                // return value.getByteCount()/1024/1024;//对应maxSize = 5m
                return value.getByteCount();// 对应maxSize = 5242880byte
            }
        };
    }

    @Override
    public Bitmap getBitmap(String url) {// 取图片
        // TODO
        return mLruCache.get(url);
    }

    @Override
    public void putBitmap(String url, Bitmap bitmap) {// 取图片
        // TODO
        mLruCache.put(url, bitmap);
    }
}

你可能感兴趣的:(Android笔记)