一、with
- with 传入是非 Application 参数,会在当前 Activity 添加一个隐藏的 Fragment,是为了让 Glide 知道图片加载的声明周期。
- 如果传入的是 ApplicationContext 参数,只有当 App 进程被 kill 时,图片才会停止加载
二、三级缓存
- Glide的缓存分为:内存缓存、磁盘缓存和网络缓存,类似与图片的三级缓存
1、内存缓存
- 内存缓存分为活动缓存和 LruCache 缓存
- 活动缓存:缓存正在使用的图片资源,底层实现是HashMap+弱引用,内部还维护了计数器,还加入了引用队列来配合GC的回收
- LruCache 缓存:内部使用了LruCach缓存从活动缓存中移除的图片资源(计数器为0),使用图片时又会主动从此缓存移除,加入活动缓存。使用了LruCache算法(最近、最常使用最不容易被移除算法),底层实现是LinkedHashMap,且accessOrder=true
注意:LruCache 中移除的图片资源会加入到 Bitmap 复用池,给从未加载过的图片使用,节省重新开辟内存
2、磁盘缓存
- 磁盘缓存分为资源缓存和原始数据缓存
- 资源缓存:缓存解压后的图片资源
- 原始数据缓存:缓存原始的图片资源
3、网络缓存
- 上述都没有,从网络中拉取图片资源