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()处理后返回得到的图片。