Glide三级缓存理解详细
本文对Glide的三级缓存进行主要的文字描述,希望能帮助大家加深对Glide的缓存理解。
Glide官网:
https://github.com/bumptech/glide
一、普通的三级缓存
内存缓存,优先加载,速度最快
本地缓存,次优先加载,速度快
网络缓存,最后加载,速度慢,浪费流量
为什么要进行三级缓存
三级缓存策略,最实在的意义就是减少不必要的流量消耗,增加加载速度。
二、Glide三级缓存分类:活动缓存、内存缓存、磁盘缓存
这个三级缓存是Glide自定义的三级缓存策略,跟我们之前接触到的三级缓存(内存,本地,网络)不一样。
三、三级缓存范围:
活动缓存:在某个Activity范围,页面退出该缓存就不存在
内存缓存:某个App范围,应用完全退出就不存在
磁盘缓存:整个系统,只要不删除数据,就一直存在
四、三级缓存的作用:
活动缓存:分担内存缓存的负担,
内存缓存:加快数据读取
磁盘缓存:进行永久性保持
五、活动缓存的说明:
活动缓存并不是我们熟悉的内存缓存,是Glide自己定义的一种缓存策略。
本质上就是HasMap,用了一次就缓存,以后需要就直接拿,不需要就清除这个缓存。
该策略的存在也是为了及时释放内存,不需要等等整个应用退出再释放内存,减轻应用内存负担。
活动缓存比内存缓存小,如果活动缓存满了,会自动写到内存缓存。
系统会对内存缓存进行自动管理,只要不是快速存放大内存文件,并且不一直占有内存对象,都不会内存溢出。
六、内存缓存的说明:
内存缓存是系统自身会管理的,但是可以继承LruCache,做进一步管理
七、磁盘缓存的说明:
磁盘缓存本质是本地文件缓存,但是通过普通的文件写入读取效率不高。
Glide中使用了DiskLruCache框架进行数据保存和读取。
效率高的主要原因是:磁盘缓存对图片文件进行了加密和压缩处理。
八、Glide三级缓存的使用
1、优先从活动缓存获取
2、活动缓存没有就再内存缓存中寻找
3、内存缓存没有,就去磁盘缓存读取
4、磁盘缓存没有就去网络获取本地文件读取
整个思路和我们普通接触到的三级缓存思路是一样的。
普通的三级缓存对所有文件有适用,
Glide三级缓存针对的是图片类型文件,
其实对音频/视频文件也有参考价值,其他文件的缓存作用就不大了。
九、Glide的缓存使用
Glide.with(this).load(url).into(imageView);//默认是开启内存缓存和磁盘缓存的。
1、内存缓存
Glide.with(this)
.load(url)
.skipMemoryCache(true)//关闭内存缓存
.into(imageView);
2、磁盘缓存
Glide.with(this)
.load(url)
.diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
.into(imageView);
一个 diskCacheStrategy( ) 方法就可以调整他的硬盘缓存策略。其中可以传入的参数有四种:
DiskCacheStrategy.ALL : 表示既缓存原始图片,也缓存转换过后的图片。
DiskCacheStrategy.NONE: 表示不缓存任何内容。
DiskCacheStrategy.RESOURCE: 表示只缓存原始图片。
DiskCacheStrategy.RESULT: (已过期,新api4.11修改为后面两个)表示只缓存转换过后的图片(默认选项)。
DiskCacheStrategy.DATA: 表示只缓存转换过后的图片。
DiskCacheStrategy.AUTOMATIC 表示智能判断选择模式(默认选项)。
内存缓存和磁盘缓存是可以同时设置的。
Glide图片的缓存是最多存在两份:
1是活动或内存缓存
2是磁盘缓存。
图片缓存不会同时存在活动缓存和内存缓存。
九、总结
Glide的活动缓存和内存缓存本质是我们熟悉的内存缓存,
Glide的磁盘缓存本质是我们熟悉的本地缓存。
不过Glide对里面每个缓存都进行了较大优化。
总而言之就是为了更快更好。
面试过程,问到对Glide的缓存理解,主要对Glide三级缓存说明它们的范围、作用、以及磁盘缓存相对普通本地文件缓存的优点即可。