一.面试提问:
1.说一下Android中的图片加载三级缓存策略:
Android中的图片加载三级缓存策略分别为内存缓存、本地磁盘缓存、网络缓存,内存缓存使用LruCache算法,本地磁盘缓存使用DiskLruCache算法。
2.为什么要使用三级缓存策略:
(1)提高图片加载的速度,提升用户的体验感。
(2)节约用户流量。
(3)bitmap的频繁重复创建,会带来内存和卡顿的问题。
3.介绍一下Android中的LruCache:
Android中提供了一个缓存类叫LruCache,它是一个泛型类,它内部采用一个LinkedHashMap以强引用的方式存储外界的缓存对象,其提供了get和put的方法来完成缓存的获取和添加的操作,当缓存满了。LruCache会移除较早使用的缓存对象。
二.LruCache介绍
1.如何使用LruCache来实现内存缓存:
(1)初始化操作:(这里以图片缓存为例)
//除以1024是为了将单位统一为KB
int maxMemory =(int)(Runtime.getRuntime().maxMemory()/1024);
//总容量大小为当前进程的可用内存的八分之一
int cacheSize=maxMemory/8;
//完成bitmap对象大小的计算
mMemoryCache=new LruCache<String,Bitmap>(cacheSize){
@override
protected int sizeOf(String key,Bitmap bitmap){
return bitmap.getRowBytes()*bitmap.getHeight()/1024;
}
};
(2)缓存的获取和添加操作
//获取一个缓存对象
mMemoryCache.get(key);
//向LruCache中添加缓存
mMemory.put(key,bitmap);
三.DiskLruCache介绍
//todo
四.Glide中的三级缓存选项设置
1.Glide的内存缓存选项设置:
默认是开启内存缓存的,可以通过下面的方法关闭内存缓存。
Glide.with(this)
.load(url)
.skipMemoryCache(true)//关闭内存缓存
.into(imageView);
2.Glide的本地磁盘缓存选项设置:
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.SOURCE: 表示只缓存原始图片。
DiskCacheStrategy.RESULT: 表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.RESULT)
.into(imageView);