LruCache,用于實現(xiàn)內存緩存,采用了Least Recently Used算法七兜,即當緩存滿時,優(yōu)先刪除最少使用的緩存福扬。
int maxMemory=(int) (Runtime.getRuntime().maxMemory()/1024);//KB
int cacheSize=maxMemory/8;
mLruCache=new LruCache<String,Bitmap>(cacheSize){
@Override
protected int sizeOf(String key, Bitmap value) {
if(Build.VERSION.SDK_INT>=19){
return value.getAllocationByteCount()/1024;
}else {
return bitmap.getByteCount()/1024;
}
}
};
maxMemory()惊搏,進程所能獲取的最大內存,這里單位為KB忧换,除8為緩存容量為內存的1/8恬惯,重寫sizeOf方法,該方法是計算緩存對象大小亚茬。
if(Build.VERSION.SDK_INT>=19){
return value.getAllocationByteCount()/1024;
}else if (Build.VERSION.SDK_INT>=12){
return bitmap.getByteCount()/1024;
}else{
return bitmap.getRowBytes()*bitmap.getHeight()/1024;
}
mLruCache.put(key,bitmap);//添加緩存
mLruCache.get(key)//獲取緩存
LruCache移除舊緩存會調用entryRemoved()方法酪耳,可以重新該方法完成一些資源回收工作
使用測試,下載圖片的代碼
URL url=new URL(path);
URL url=new URL(path);
InputStream inputStream=url.openStream();
bitmap= BitmapFactory.decodeStream(inputStream);
mLruCache.put(key,bitmap);
list.add(key);
inputStream.close();