glide源码阅读系列(一)

作者: 小鱼儿和熊爪爪 | 来源:发表于2018-08-31 17:16 被阅读143次

    我掐指一算今天适合读源码,没错就从glide开始,不是什么完全解析,不是什么加载原理,就是读,往死里读,Read The Fucking Source Code。

    先把glide源码下载到AS,然后来看看glide的工程目录结构:

    glide工程目录

    很明显上帝告诉我应该从glide和library这两个module开始读,于是我兴奋的点开了它们:

    glide与library

    glide是个空module,很棒棒,成功的欺骗了我,看来重点是library啊,于是我又兴奋的点开了library:

    library目录结构

    这里面全是glide的精华啊,很棒棒,今天就从Glide这个类开始读吧,走起...

    首先源码肯定不能像小说那样逐字逐句的从上往下读啊,回顾一下glide是怎么用的:

    Glide.with(context).load(pic).into(imageView);所以我们先从这个with方法入手,

    在Glide这个类里面with方法一共有四个重载方法,它们只是传入的context类型不一样,最终它们都去调getRetriever()这个方法,我们先顺着这条线往下捋

    可以看到getRetriever()这个方法先通过Glide的get方法获取Glide的单列,在获取Glide单列的时候进行了初始化操作,初始化操作的内容看起来非常陌生,没关系,先跳过,等我把整体源码撸清楚后再回来收拾它。getRetriever()方法在获取到Glide的单列之后调用了Glide的getRequestManagerRetriever()方法:

    这个方法返回了RequestManagerRetriever对象,我们来看看这是个什么鬼:

    注释说这是一个获取RequestManager对象的东西,那么RequestManager又是什么鬼:

    注释又说了这是一个管理和启动Glide请求的类,这是个好东西呀,今天先不管它,我们先回到Glide这个类,刚才说getRequestManagerRetriever()返回了一个RequestManagerRetriever对象,但是这个对象在哪初始化的呢,来一起看看:

    可以看到它是在构造的时候传入的,Glide构造方法是GlideBuilder这个类调用的,而RequestManagerRetriever这个对象是直接new出来的:

    GlideBuilder先放一放,我们再次回到Glide,我们来看看它的构造到底干了什么:

    glide构造方法代码很长,我只贴了一部分,这个方法主要是给声明的变量赋值,赋值的细节后面把其他类读懂了再补充。读到这里Glide这个类的核心方法已经过了一遍,感觉并没有什么收获,哇哈哈哈,真是想笑。

    今天我们主要通过Glide这个类看了Glide.with(context)方法,没有学到任何东西,没关系,我们已经迈出了一小步,正所谓万丈高楼平地起,接下来我先去喝杯咖啡,下期再见。

    glide源码阅读系列(二)

    相关文章

      网友评论

      本文标题:glide源码阅读系列(一)

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