LruCache

LruCache基础知识

1、LruCache是计算机科学经常使用的一种近期最少使用算法

2、LruCache内部采用的是LinkedHashMap

3、LruCache的出现时为了取代SoftReference

Android 3.0之前做图片缓存主要用的就是SoftReference,3.0以后虚拟机更倾向于用SoftReference来索引对象,所以LruCache的出现就是为了取代它。

代码讲解

/**
 **用来加载网络图片,并缓存到内存
 */
public class SimpleImageLoader{
    private static SimpleImageLoader mLoader;
    private LruCache,Bitmap> mLrucache;
    public static SimpleImageLoader getInstance(){
        if(mLoader ==  null){
            synchronized (SimpleImageLoader.class){
                if(mLoader == null){
                    mLoader = new SimpleImageLoader();
                }
            }
        }
        return mLoader;
    }
    //用来初始化缓存对象
    private SimpleImageLoader(){
        //获取到最大可用的内存空间
        int maxSize = (int)Runtime.getRuntime().maxMemory()/8;//一般用除以八来表示,具体视APP大小而定
        mLrucache = new LruCache,Bitmap>(maxSize){
            @Override
            protected int sizeOf(String key, Bitmap value) {
                return value.getByteCount();
            }
        };
    }
    //用来加载网络图片
    public void displayImage(ImageView view, String url){
        //首先判断内存缓存中是否有这张图片
        Bitmap bitmap = getBitmapFromCache(url);
        if(bitmap != null){
            view.setImageBitmap(bitmap);
        }else{
            downloadImage(view,url);
        }
    }

    //从缓存中读取图片
    private Bitmap getBitmapFromCache(String url){
        return mLrucache.get(url);
    }

    //将下载下来的图片保存到缓存中
    private void putBitmapToCache(Bitmap bitmap,String url){
        if(bitmap !=null){
            mLrucache.put(url,bitmap);
        }
    }
    private void downloadImage(final ImageView imageView,final String url){
        //从网络下载图片,下载成功后并保存在缓存中
    }
}

你可能感兴趣的:(LruCache)