我掐指一算今天适合读源码,没错就从glide开始,不是什么完全解析,不是什么加载原理,就是读,往死里读,Read The Fucking Source Code。
先把glide源码下载到AS,然后来看看glide的工程目录结构:
glide工程目录很明显上帝告诉我应该从glide和library这两个module开始读,于是我兴奋的点开了它们:
glide与libraryglide是个空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)方法,没有学到任何东西,没关系,我们已经迈出了一小步,正所谓万丈高楼平地起,接下来我先去喝杯咖啡,下期再见。
网友评论