LruCache 结合 FIFO 策略实现bitmap缓存

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值