美文网首页
图片框架 - Glide 4.11.0源码走读

图片框架 - Glide 4.11.0源码走读

作者: Stan_Z | 来源:发表于2020-07-03 20:05 被阅读0次

    本篇文章对Glide最新4.11.0版本做一个宏观解析,目的是把握下Glide的大框架,有了宏观了解之后,再剖析细节就比较容易了。

    源码解析:

    Glide.with(this).load(url).into(imageView);
    按如上代码,总结流程图和类图来从执行流程和类关系两个维度来解析下Glide的基础框架。

    一、流程图

    1.1 with

    with过程
    with主要干两件事:
    • 图片加载绑定对应页面生命周期;
      生命周期分为application 和 非application两种。分别通过ApplicationLifecycle、ActivityFragmentLifecycle来管理生命周期。

    • 初始化RequestManager;

    1.2 load

    load过程
    流程以加载String url为例。

    load主要干一件事情:

    • 通过RequestManager初始化RequestBuilder。确认加载的资源类型以及一些参数的初始化,为后续into做准备。
      1.3 into
      into过程
      into主要干了三件事:
    • 封装并发起request。
    • request获取图片数据。
    • 将图片显示到View上。

    request获取图片逻辑:


    Engine图片资源获取管理逻辑
    图片获取方式

    优先级:当前正在使用的缓存 > LruCache > 网络/磁盘

    二、类图

    这里只梳理下核心类的关系


    Glide类关系图

    简单总结下理解:

    Glide.with(this).load(url).into(imageView);

    Glide是一个单例的调用入口类。
    with:初始化RequestManager,绑定生命周期。
    load:加载资源并初始化RequestBuilder。
    into:由RequestBuilder构建Request和Target交由RequestManager去处理。

    核心功能全部交给RequestManager来处理:
    通过with、load、into三板斧后,给到RequestManager的工作内容:

    • 绑定对应页面生命周期。
    • 处理Request获取图片资源。
    • 将图片资源加载到Target对应的目标控件上。

    RequestManager左膀右臂TargetTracker、RequestTracker,前者负责绑定页面生命周期,后者负责剩下两项工作。

    Request通过Engine来管理图片加载,按:活跃内存>LruCache>网络/磁盘 优先级获取图片资源。具体图片获取由对应的DataFetcher来处理,然后交给DecodeJob去做图片的解码。最后通过回调返回给Target去设置图片。

    相关文章

      网友评论

          本文标题:图片框架 - Glide 4.11.0源码走读

          本文链接:https://www.haomeiwen.com/subject/mfhrqktx.html