LruCache¶
创建一个LruCache¶
LruCache实际上是一个Map,指定它的键值对类型。
private LruCache<String,Bitmap> mCaches;
从缓存中获取数据¶
public Bitmap getBitmapFromCache(String url){
return mCaches.get(url);
}
把图片添加到缓存¶
public void addBitmapToCache(String url,Bitmap bitmap){
//如果缓存中没有该图片就噗特进去
if(getBitmapFromCache(url) == null){
mCaches.put(url,bitmap);
}
}
获取最大内存¶
获取当前应用所可以使用的最大内存,并设置一个缓存的大小值来初始化LruCache。
int maxMemory = (int) Runtime.getRuntime().maxMemory();
int cacheSize = maxMemory / 4;
mCaches = new LruCache<String,Bitmap>(cacheSize){
@Override
protected int sizeOf(String key,Bitmap value){
// 在每次存入缓存的时候调用,告诉系统当前存的对象到底有多大
// 所以返回一个实际的大小
return value.getByteCount();
}
}
获取图片¶
//获取图片的时候,第一步会去内存缓存中取出图片
Bitmap bitmap = getBitmapFromCache(url);
if(bitmap == null){
//如果缓存中没有,就直接使用异步任务从网络上下载图片
}else{
//如果缓存中有,就直接使用图片
}
下载图片的同时保存至LruCache¶
//在异步任务的下载逻辑中,还需要将下载完毕的图片保存到LruCache中
@Override
protected Bitmap doInBackground(String... params){
String url = params[0];
//从网络上获取图片
Bitmap bitmap = getBitmapFromURL(url);
if(bitmap != null){
//将不在缓存的图片加入缓存
addBitmapToCache(url,bitmap);
}
return bitmap;
}
通过这个方法就可以把下载过的图片存入缓存 刷新时就不用每次都从网上下载 典型的”以内存换效率” listview常用