最近在项目中使用gridview分页加载缩略图,为了使得缩略图加载速度更快些,所以想到保存起来,所以使用了LruCache试了下
目前效果不错。
核心代码:
private LruCache<String,Bitmap>mMemoryCache;
@Override
protected void onCreate(Bundle savedInstanceState){
int maxMemory = (int )Runtime.getRuntime().maxMemory();
int cacheSize = maxMemory/8;
mMemoryCache = new LruCache<String,Bitmap>(cacheSize){
@Override
protected int sizeOf(String key,Bitmap bitmap){
return bitmap.getByteCount();
}
} ;
}
private void addBitmapToMemoryCache(String key,Bitmap bitmap){
if(getBitmapFromMemoryCache(key) == null && bitmap!=null){
mMemoryCache.put(key,bitmap);
}
}
public Bitmap getBitmapFromMemoryCache(String key){
return mMemoryCache.get(key);
}
An系统理论上给每个应用分配32M的内存空间;
sizeOf返回的是图片的数量;
当超过给定的内存的时候,最近最少使用的图片会被回收掉;
LruCache的键值对是Url和对应的图片,图片也可以用drawable表示;
在获取bitmap大小的方法方面,不同阶段API有不同的方法;
API12之前:return bitmap.getRowBytes()*bitmap.getHeight();
API12到API19:return bitmap.getByteCount();
API19及以上:return bitmap.getAllocationByteCount();