LruCache

来源:互联网 发布:现已知最大的星球 编辑:程序博客网 时间:2024/06/06 09:47

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<String,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<String,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){        //从网络下载图片,下载成功后并保存在缓存中    }}