GlideV4源码分析

1. 前言

1.1 现有Glide V4源码分析文章

现有的Glide V4源码分析的文章包含许多优秀的文章:

  • 【1】对Glide的Load过程进行详细的分析: https://blog.csdn.net/github_33304260/article/details/78116312
    with过程分析相近,思考深入,load过程相近,但是过于冗长

  • 【2】对Glide的主要功能和主要的类进行了介绍:https://blog.csdn.net/json_it/article/details/78573562
    总结了Glide主要特点

  • 【3】用图文的方式对Glide的工作过程进行了详细分析:https://juejin.im/entry/586766331b69e60063d889ea
    里面的图非常经典

  • 【4】Glide基本概念介绍:https://www.angeldevil.me/2016/09/05/glide/

这些文章都对Glide源码分析比较透彻,【1】里面贴了太多源码,导致文章冗长,很难阅读。【3】通过图文的方式解决了这个问题,但是对load过程介绍过于简化。因此,本文将以图文的方式对glide的工作原理进行分析。主要包含

RequestManager的构建过程
Request的构建过程
Load的过程
1.2 需要分析的问题
(1)RequestManager如何实现生命周期关联的

(2)Request创建的过程

(3)Transform的过程

(4)Bitmap的操作

1.2 Glide基本组件简介

(1)工作原理
GlideV4源码分析_第1张图片

1.2.1 数据转换过程

1.2.2 View转化为target的过程

View转化为Target过程​​​
GlideV4源码分析_第2张图片
taget的类型
GlideV4源码分析_第3张图片

target的类型
GlideV4源码分析_第4张图片

Resource的类型

Glide的加载过程
GlideV4源码分析_第5张图片

1.3 分析的案例
为了简化问题,减少分析,如下demo所示,本文分析限定如下范围:

  • model类型为url
  • target为ImageView
Glide.with(mContext)
            .load(url1)
            .into(imageView);

2. RequestManager的创建过程(with过程)

2.1 Context为ApplicationContext的情况

GlideV4源码分析_第6张图片

2.2 Context为Activity或者Fragment的情况

GlideV4源码分析_第7张图片

相关类图

3. RequestBuilder创建过程(load过程)

GlideV4源码分析_第8张图片

4. 资源请求和绑定过程(into)

4.1 创建Request

4.2 执行Request,并且绑定到View上面

4 Model转化为transformedResource的过程

整体转化过程

  1. Model经过ModelLoader处理转化为DataClass(eg:Url->Bitmap)
  2. DataClass经过ResourceDecoder转化为Resource(eg:Bitmap->Resource
  3. Resource经过Transformation转化为transformsResource(eg:转化为圆角或者圆形)
  4. transformsResource经过Encoder转化为LocalCache(eg:将Bitmap转化存储在本地磁盘上面)

Glide实现过程概览

下图是Glide实现上述转化过程的流程图,其包含了转化过程关键步骤和关键的操作,具体源码的实现,可参照下图自己去看,收获可能更大一些。
(1)说明:

  • 绿色部分的角色代表上图里面各个转化器
  • 橙色部分代表数据类型发生转化的地方

(2)关键类说明

  • DecodeJob:整个转化的过程均在DecodeJob之中完成
  • ModelLoader:将Model转化为DataClass
    • 依赖Fetcher来完成数据的获取
  • LoadPath:将DataClass转化为Resource
    • 依赖DecodePath
  • DecodePath:执行DataClass->Resource->transformedResource
    • 依赖ResourceDecoder
    • 依赖Transformation

GlideV4源码分析_第9张图片

上述关键类的实例简述

ModelLoader

ModelLoader的实例:

Resource

Resource的实例:

Encoder

Encoder的实例:

参考文献

  • GlideV4源码分析:http://www.lightskystreet.com/2015/10/12/glide_source_analysis/
    • 图非常好,非常清晰。本文部分图片参考该文
  • 对Glide的Load过程进行详细的分析:https://blog.csdn.net/github_33304260/article/details/78116312
  • 对Glide的主要功能和主要的类进行了介绍:https://blog.csdn.net/json_it/article/details/78573562
  • Glide基本概念介绍:https://www.angeldevil.me/2016/09/05/glide/

你可能感兴趣的:(android,Glide,GlideV4)