2.25 Glide源码解析
2.22.1 Glide
- 使用
GlideApp.with(context)
.load(imageUrl)
.into(imageView);
- 架构图(引用自Glide 源码分析])
- 接口层,
Glide
,RequestManager
Engine
, 包含EngineJob
,DecodeJob
- 缓存, 包含内存缓存, 两级缓存,即可
activeResource
和MemoryCache
, 磁盘缓存
2.22.1 Glide流程
Glide#with
, 判断Context
的生命周期是否合法, 获取RequestManager
RequestManager#load
, 构建RequestBuilder
RequestBuilder#into
, 先构建ViewTarget
,ViewTarget#setRequest
,SingleRequest#begin
->Engine#load
, 启动加载图片Engine#load
, 从#activeResource
缓存加载(使用HashMap弱引用图片), 如无命中则从二级缓存MemoryCache
加载(使用lru算法, 即LinkedHashMap
), 如无命中则启动EngineJob
, 调度DecodeJob
和处理回调,DecodeJob
真正加载和缓存资源, 根据disk缓存策略决定是否从缓存加载, 加载通过生成Generator
-> 实例化ModelLoader
, 最后IO和解码