Android源码框架之一:缓存机制:Android LruCache

Android的三级缓存:1. 内存缓存 2. 磁盘缓存 3. 网络缓存

其中主要的就是内存缓存和硬盘缓存,这两种缓存机制的实现都应用到了LruCache算法。

应用场景:

通过http请求网络上的图片文件,然后保存在缓存中;显示图片时,先从缓存中取,如果没有,就发送请求向服务器取。

代码示例:

/**
 * Created by GaryCao on 2019/05/15.
 *
 * 图片缓存实现
 *
 * 优点:借助Android LruCache,实现图片内存缓存
 */
public class LruCacheManager {
    private static final String TAG = "LruCacheManager";
    private static LruCacheManager mInstance;
    private LruCache<String, Bitmap> mBitmapCache;

    private LruCacheManager() {
        int maxMemory = (int) (Runtime.getRuntime().totalMemory() / 1024);
        int cacheSize = maxMemory / 8;
        mBitmapCache = new LruCache<String, Bitmap>(cacheSize) {
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getRowBytes() * value.getHeight() / 1024;
            }
        };
    }

    // 把Bitmap对象加入到缓存中
    public void addBitmapToCache(String key, Bitmap bitmap) {
        if (getBitmapFromCache(key) == null) {
            mBitmapCache.put(key, bitmap);
        }
    }

    // 从缓存中得到Bitmap对象
    public Bitmap getBitmapFromCache(String key) {
        Log.i(TAG, "mBitmapCache size: " + mBitmapCache.size());
        return mBitmapCache.get(key);
    }

    // 从缓存中删除指定的Bitmap
    public void removeBitmapFromCache(String key) {
        mBitmapCache.remove(key);
    }

    public synchronized LruCacheManager getInstance() {
        if (mInstance == null) {
            mInstance = new LruCacheManager();
        }

        return mInstance;
    }
}
发布了216 篇原创文章 · 获赞 67 · 访问量 95万+

猜你喜欢

转载自blog.csdn.net/cbk861110/article/details/90246888