引入:我们知道图片加载时耗时且耗流量的,如果我们每次都从网络中去获取图片,那么必然响应速度和体验效果是极差的。为了解决该问题,我们引入了缓存,即将图片缓存起来,以便下一次直接从缓存中取,而不用再从网络中去取了。缓存一般分为内存缓存和存储设备缓存。通常情况下,我们去加载一张图片时,会先从内存中获取,若内存中不存在,再从存储设备中去获取,若还是不存在,最后从网络中获取。
LruCache的缓存算法
LruCache采用的缓存算法为LRU(Least Recently Used),最近最少使用算法。核心思想是当缓存满时,会优先淘汰那些近期最少使用的缓存对象。
LruCache的实现:
LruCache是一个泛型类,它内部采用了一个LinkedHashMap以强引用的方式存储外界的缓存对象,其提供get和put方法来完成缓存的获取和添加。
public class LruCache<K, V>{
private final LinkedHashMap<K, V> map;
....
}
LruCache是线程安全的,因此是可以采用多线程并发处理。
创建LruCache:
//获取到应用的最大内存
int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
//设置LruCache的缓存大小
int cacheSize = maxMemory / 8;
//重写sizeOf,并返回以kB为单位的缓存对象的大小
mMemoryCache = new LruCache<String, Bitmap>(cacheSize){
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / 1024;
}
};
使用LruCache:
//获取到缓存对象
mMemoryCache.get(key);
//添加缓存对象
mMemoryCache.put(key,value);