Glide源码探究(二)Glide整体设计
本文参考前辈们的文章,结合源码,从以下角度继续探究Glide的源码设计。个人觉得如果先有一个整体的认识,然后再深入探讨是比较舒服的。本文从以下角度继续探究Glide:
- Glide整体框架
- Glide模块间的调用流程
- Glide库 目录结构
- Glide的类之间的关系
1.Glide整体框架
结合上面的图,我们分两步探究这个库的工作原理,
第一步:当我们使用这个Glide库加载图片时,它内部先初始化Glide以及它需要用到的相关组件,关联生命周期,构建请求RequestBuilder,初始化Engine;
第二步:Engine获取数据,具体步骤是先从缓存拿数据(Memory和Active都是内存缓存),拿到了就返回到MainThread;拿不到就调度一个DecodeJob任务从数据源获取数据,拿到数据后通过DecodeJob处理数据,缓存起来然后回调到MainThread。
第三步:回到主线程给View加载对应的资源
2.Glide模块间的调用流程
3.Glide库 目录结构
4.Glide的类之间的关系
这张图反映了类之间的实现,继承,组合关系,其中实心箭头代表组合,空心箭头代表实现implements ,空心圆形代表接口。组合不了解的可以搜一下组合模式。
结合3和4可以看到整个库分为 RequestManager(请求管理器),Engine(数据获取引擎)、 Fetcher(数据获取器)、MemoryCache(内存缓存)、DiskLRUCache(磁盘缓存)、Transformation(图片处理)、Registry(图片类型及解析器配置)、Target(目标) 等模块
通过这篇呢对Glide的整体设计有了一个初步的了解,接下来结合源码分析每一个模块是怎么工作的