(二)Glide源码解析之缓存机制
1. Glide的缓存介绍:
- 活动缓存:
- 内存缓存
- 磁盘缓存
2. 缓存Key :
从Engine的load()方法里开始分析。我们根据下面的代码看Key是怎么生成的。
1 | public <R> LoadStatus load( |
可以看出key的生成,是通过图片的地址、宽高以及给图片设置的其他参数一起组合,生成了Key。生成Key主要是通过在EngineKey中重写了equals()和hashCode()方法,保证所有参数相同的情况下,才认为是同一个Key。
3. 内存缓存
内存缓存分为两部分
- 活动缓存 (弱引用)
- 内存缓存
当Glide加载完一张图片后,首先会放到活动缓存,当需要从活动缓存移除时,会保存到内存缓存。这样下次加载同一张图片时,不需要从网络或者磁盘上加载,只要内存中有这张图片,就直接在内存中加载。既省了流量,也提高了加载显示图片的效率,因为加载内存中图片是最快的。
1 | Glide.with(this) |
从加载内存缓存的代码开始分析
1 | public class Engine implements EngineJobListener, |
分析1.1
1 | final class ActiveResources { |
//分析2:内存缓存
1 | public class Engine implements EngineJobListener, |
分析2.1:
1 | public final class GlideBuilder { |
分析点2.2:
activeResources就是一个弱引用的HashMap,用来缓存正在使用中的图片,我们可以看到,loadFromActiveResources()方法就是从activeResources这个HashMap当中取值的。使用activeResources来缓存正在使用中的图片,可以保护这些图片不会被LruCache算法回收掉。