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