Android Retrofit框架源码分析(配置篇)

Android技术研究原创如需转载请注明出处

以下是在Application中需要配置的Retrofit代码,这是一个典型的Builder模式

建造者模式
定义
将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。

《Android Retrofit框架源码分析(配置篇)》 配置代码.png

首先来分析Retrofit.Builder(),调用默认BuiltInConverters构造初始化,不做任何操作,然后新增BuiltInConverters到List<Converter.Factory> converterFactories列表。

《Android Retrofit框架源码分析(配置篇)》 Builder.png

接着分析baseUrl(URL)方法,这里会先通过checkNotNull方法检测传递的url是否为null,接着设置baseUrl,返回当前Builder。

《Android Retrofit框架源码分析(配置篇)》 parse_url.png
《Android Retrofit框架源码分析(配置篇)》 object_isNull.png

接着分析addConverterFactory(GsonConverterFactory.create())方法,首先看看一下代码

《Android Retrofit框架源码分析(配置篇)》 GsonConverterFactory.png

GsonConverterFactory.create()方法初始化了Gson及GsonConverterFactory,在addConverterFactory方法中

《Android Retrofit框架源码分析(配置篇)》 addConverterFactory.png

同样把GsonConverterFactory添加进了converterFactories列表中,然后返回当前Builder。

接着分析addCallAdapterFactory(RxJavaCallAdapterFactory.create())的流程,RxJavaCallAdapterFactory.create()的相关代码如下:

《Android Retrofit框架源码分析(配置篇)》 RxJavaCallAdapterFactory.create.png

可以看到以上代码中实现了CallAdapter.Factory接口,但是当前只是初始化了RxJavaCallAdapterFactory,没有做其他操作,其他的实现方法等分析到了再做解释,接着分析addCallAdapterFactory方法,该方法相关代码如下:

《Android Retrofit框架源码分析(配置篇)》 addCallAdapterFactory.png

此方法把RxJavaCallAdapterFactory对象add到了adapterFactories列表中,然后返回了当前Builder。

接着分析build()方法,该方法相关代码如下:

《Android Retrofit框架源码分析(配置篇)》 build.png

以上代码中首先校验了url,然后初始化了OKHttpClient对象,然后把之前的RxJavaCallAdapterFactory添加到了局部的adapterFactories列表中,然后add了一个默认的DefaultCallAdapter,接着把全局的converterFactories拷贝到了局部的converterFactories中,一切对象初始化工作做完后开始Retrofit对象的创建,相关代码如下:

《Android Retrofit框架源码分析(配置篇)》 new_Retrofit.png

从以上代码中前四个参数在当前的配置中是都有值的,但是callbackExecutor=null和validateEagerly=false(默认值)

《Android Retrofit框架源码分析(配置篇)》 new_RetorFit.png

初始化Retorfit没有做额外的其他操作,那么配置相关的代码就分析完毕了,在这个过程中我们初始化了BuiltInConverters、GsonConverterFactory、Gson、RxJavaCallAdapterFactory、OKHttpClient、DefaultCallAdapter、Retrofit等对象,下篇接着分析这些对象在Retorfit中的使用。

    原文作者:Android技术研究
    原文地址: https://www.jianshu.com/p/946c34a5bda2
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞