基本操作
如图:
我们按用法一步一步分析 Glide.with(context).load(url).into(view)
- Glide.with(context) 返回RequestManager, RequestManager由RequestManagerRetriever 管理, 一个context 对应一个RequestManager
- 给每个Activity 添加透明Fragment ,方便管理view 的生命周期
RequestManager.load(url) 返回 GenericRequestBuilder
into(view)
- 把view 封装成Target , 检查Target 上是否有以前的request,并启动当前的request,把request 设为view 的tag.
- 用RequestTracker 管理Request, lifecycle 管理Target 的加载图片,或停止加载
- RequestTracker runRequest 调用 GenericRequest begin 方法开始加载数据
- 如果width,height 已经有了,onSizeReady 中加载 从LoadProvider 中取出modelLoader, DataFetcher, 加入engine 中。在engine中 new engineJob, decodeJob放入engineRunning 中运行并添加ResourceCallback 回调。(engineJob 负责取数据,decodeJob 把数据转成图片并取大小)
- ResourceCallback 调用 GenericRequest onResourceReady 给target 设图片.
lifecycle管理
lifecycle: 一个fragment 对应 一个lifecycle, 管理lifecycleListener onStart,onStop lifecycleListener 实现类Traget,RequestManager,ConnectivityMonitor 实现是否有网络连接,网络连接,是否显示到imageview 上这三点加以控制。
ModelClass,ResourceClass 对应管理
通过ModelLoaderFactory ,modelLoader,DataFetcher 在GenericLoaderFactory 中有两个hashmap , modelClassToResourceFactories,resourceToFactories 来管理modelClass,ResourceClass 映射。