上一节通过使用BitmapFactory的Options类进行图片的压缩来实现图片加载优化。但是同一资源如果要进行频繁的访问,显然每一次都从网络上下载资源显然是不合理的,所以要用到缓存机制。将网络资源下载后放到本地或内存,之后就可以直接获取本地资源而不用下载资源。
方法二 LruCache类实现缓存图片到内存
LRU算法是近期最少使用算法,普遍应用在操作系统的内存管理上。当存储空间满了之后,它会删除最久未使用的资源从而腾出存储空间。
LruCache是Android3.1提供的一个缓存类,将缓存存放在LinkedHashMap中。LinkedHashMap按照使用时间进行排序,当缓存满了之后删除最后一个缓存,即最久未使用的缓存。
LruCache提供了get()和put()请求使得缓存方法更加方便简单。
使用方法
- 构造一个LruCache对象
public LruCache<String, Bitmap> mLrucache;
int maxSize = (int) (Runtime.getRuntime().maxMemory() / 8);
mLrucache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getByteCount();
}
};
maxSize为确定缓存的最大容量,一般为内存的1/8;sizeof方法确定每个图片的大小。
- put()方法将对应文件放入LinkedHashMap中,一般用于资源不存在第一次加载之后
private void putBitmapToCache(Bitmap bitmap, String url) {
if(bitmap != null) {
mLrucache.put(url, bitmap);
}
}
- get()方法检查内存中是否有该资源,如果存在返回该资源
private Bitmap getBitmapFromCache(String url) {
if(url != null) {
if(mLrucache.get(url) != null) {
return mLrucache.get(url);
}
return null;
}
return null;
}