2.25 Glide源码解析

less than 1 minute read

2.22.1 Glide

  • 使用
  GlideApp.with(context)
       .load(imageUrl)
       .into(imageView);

总体设计图

  1. 接口层, Glide, RequestManager
  2. Engine, 包含EngineJob, DecodeJob
  3. 缓存, 包含内存缓存, 两级缓存,即可activeResourceMemoryCache, 磁盘缓存

2.22.1 Glide流程

  1. Glide#with, 判断Context的生命周期是否合法, 获取RequestManager
  2. RequestManager#load, 构建RequestBuilder
  3. RequestBuilder#into, 先构建ViewTarget, ViewTarget#setRequest, SingleRequest#begin -> Engine#load, 启动加载图片
  4. Engine#load, 从#activeResource缓存加载(使用HashMap弱引用图片), 如无命中则从二级缓存MemoryCache加载(使用lru算法, 即LinkedHashMap), 如无命中则启动EngineJob, 调度DecodeJob和处理回调, DecodeJob真正加载和缓存资源, 根据disk缓存策略决定是否从缓存加载, 加载通过生成Generator -> 实例化ModelLoader, 最后IO和解码

参考

Tags:

Categories:

Updated: