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; }