Glide源码分析

256 阅读1分钟

基本操作

如图:

我们按用法一步一步分析 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 映射。

缓存管理