29 三级缓存案例

LRU:least rencently used 最近最少使用

LruCache 会在内存不足的杀死最近不常用的资源

package com.qf.sxy.day30_cache.utils;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.Log;
import android.util.LruCache;

import com.qf.sxy.day30_cache.asynctask.DownLoadImage;
import com.qf.sxy.day30_cache.interfacecallback.ImageCallBack;

/**
 * Created by sxy on 2016/9/30.
 * 进行缓存和处理图片
 */
public class LruCacheUtils {

    //Lru缓存
    private LruCache<String,Bitmap> cache;
    private  Context context;
    private ImageCallBack imageCallBack;

    public LruCacheUtils(Context context,ImageCallBack imageCallBack){

        this.context = context;
        this.imageCallBack = imageCallBack;
        //运行时内存的1/8大小
        long maxMemory = Runtime.getRuntime().maxMemory();
        int maxSize =(int)(maxMemory/8);
        cache = new LruCache<String,Bitmap>(maxSize){

            //返回图片的大小
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount();
            }
        };
    }


    //获取图片
    public Bitmap getBitmap(String key){

        //从缓存中找
        Bitmap bitmap = cache.get(key);
        if (bitmap!=null){
            Log.e("AA","==Lru==");
            return bitmap;
        }else{
            //从Sd找
            bitmap = Utils.getBitmapFromSD(key,context);
            if (bitmap!=null){
                Log.e("AA","==SD==");
                //存到缓存
                cache.put(key,bitmap);
                return bitmap;
            }else{
                Log.e("AA","==NET==");
                //下载图片
                new DownLoadImage(context,cache,imageCallBack).execute(key);
            }
        }


        return null;
    }

}
原文地址:https://www.cnblogs.com/muyuge/p/6152161.html