LruCache 结合 FIFO 策略实现bitmap缓存

来源:互联网 发布:mp3合并软件 编辑:程序博客网 时间:2024/05/29 15:11
private final int hardCachedSize = 2*1024*1024; private final LruCache<String, Bitmap> sHardBitmapCache = new LruCache<String, Bitmap>(hardCachedSize){      @Override      public int sizeOf(String key, Bitmap value){          return value.getRowBytes() * value.getHeight();      }      @Override      protected void entryRemoved(boolean evicted, String key, Bitmap oldValue, Bitmap newValue){          Log.v(TAG, "luzechun hard cache is full , push to soft cache");          sSoftBitmapCache.put(key, new SoftReference<Bitmap>(oldValue));      }  };  private static final int SOFT_CACHE_CAPACITY = 40;private final static LinkedHashMap<String,SoftReference<Bitmap>> sSoftBitmapCache =new LinkedHashMap<String, SoftReference<Bitmap>>(SOFT_CACHE_CAPACITY, 0.75f, true){  @Override  public SoftReference<Bitmap> put(String key, SoftReference<Bitmap> value){return super.put(key, value);  }  @Override  protected boolean removeEldestEntry(LinkedHashMap.Entry<String,SoftReference<Bitmap>> eldest){  if(size() > SOFT_CACHE_CAPACITY){  Log.v(TAG, "luzechun Soft Reference limit , purge one");  return true;  }  return false;  }   };public boolean putBitmap(String key, Bitmap bitmap){  if(bitmap != null){  synchronized(sHardBitmapCache){  sHardBitmapCache.put(key, bitmap);  }  return true;  }         return false;  }

原创粉丝点击