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