1.Glide.with()得到RequestManager;

2.RequestManager.load()创建request请求;

3.RequestTracker启动request运行,通过调用Engine.load()去执行图片加载任务,会先尝试从resource和cache加载;
  ActiveResources缓存和MemoryCache缓存,分别使用弱引用技术和LRU技术,构成两级内存缓存,两者有相似之外却又截然不同。

  相同之处:都是基于内存做缓存,运行在主线程;
  不同之处:ActiveResources依赖垃圾回收机制做淘汰运算,MemoryCache是强引用有最大内存限制,根据最近最少使用规则来淘汰
  优先级:ActiveResources优先级高于MemoryCache,ActiveResources当中保存的是活动对象,在ActiveResources某个item被回收时,如果其对应的真正的Resource没有被回收,会下放到MemoryCache当中,当然,从MemoryCache中取出的值,会存放在ActiveResources中;

4.创建EngineJob和DecodeJob具体去执行任务,在resource和cache加载无法命中的情况下通过Fetcher进行加载,
//Stage表示当前run执行到哪一步骤
  private enum Stage {
    INITIALIZE,//初始状态
    RESOURCE_CACHE,//剪裁图Disk缓存
    DATA_CACHE,//原图Disk缓存
    SOURCE,//远程图片
    ENCODE,//解析状态
    FINISHED,//完成
  }

5.Fetcher在数据准备好之后通过LoadPath执行加载任务;

6.ResourceDecoder进行decode()处理;

7.ResourceTranscoder进行ranscode()处理后返回得到的图片。

 

Glide加载图片

相关文章: