本文对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三级缓存说明它们的范围、作用、以及磁盘缓存相对普通本地文件缓存的优点即可。

共勉:向前行进。

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐