Retrofit 原理浅析 二

Retrofit 原理浅析 二_第1张图片

类型安全的连接

Retrofit 原理浅析 二_第2张图片

enqueue : 异步 切线程,会在队列中执行

execute :  同步 不切线程

Retrofit:Create

Retrofit 原理浅析 二_第3张图片

1.验证是否是接口  否则是类或者其他则报错 API Declarations must be interfaces

2.check . add  取出进行处理,然后添加到Colltions 中,如果有父接口则报错,不能是泛型

        添加到队列

Retrofit 原理浅析 二_第4张图片

进一步验证

Retrofit 原理浅析 二_第5张图片

每个方法/接口 初次调用时验证结构,创建时create时候就进行验证

判断是否是jdk8的默认方法,或者非静态方法,不进行加载default和static的方法

动态代理:

Retrofit 原理浅析 二_第6张图片

参数:1 classLoader,临时的classLoader,意义不大 ,2.数组,当前接口API , 3 InvocationHandler ,回调方法 核心invoke

Retrofit 原理浅析 二_第7张图片

如果是Object的方法 则直接invoke

如果是java8平台特性方法,则过滤

然后 loadServiceMethod

Retrofit 原理浅析 二_第8张图片

 ServiceMethod = Map 带缓存的加载

Retrofit 原理浅析 二_第9张图片

Retrofit 原理浅析 二_第10张图片

Retrofit 原理浅析 二_第11张图片

Retrofit 原理浅析 二_第12张图片

核心  invoke 方法:

创建OKHttpCall

创建adapt 

Retrofit 原理浅析 二_第13张图片

 Retrofit 原理浅析 二_第14张图片

1 判断是否是自动生成的方法

2 callAdapter

Retrofit 原理浅析 二_第15张图片

Retrofit 原理浅析 二_第16张图片

OkhttpCall: dapte 最终执行OkhttpCall.adapte

 Retrofit 原理浅析 二_第17张图片

执行Retrofit的Calladpe

Retrofit 原理浅析 二_第18张图片

Retrofit 原理浅析 二_第19张图片

通过工厂方法

在Retrofit初始化

Retrofit 原理浅析 二_第20张图片

调用者

Retrofit 原理浅析 二_第21张图片

调用者

Retrofit 原理浅析 二_第22张图片

调用,Retrofit的Builder

Retrofit 原理浅析 二_第23张图片

Retrofit 原理浅析 二_第24张图片

new Default

Retrofit 原理浅析 二_第25张图片

Retrofit 原理浅析 二_第26张图片

Retrofit 原理浅析 二_第27张图片

retrofit.enqueue 则执行的是executorCallbackCall 包着OkHttpCall

delegate = call

Execute 线程管理

Retrofit 原理浅析 二_第28张图片

切线程 然后执行回调

切线程的callbackExecute

Retrofit 原理浅析 二_第29张图片

Retrofit 原理浅析 二_第30张图片

切线程是 往 前台切换

Retrofit 原理浅析 二_第31张图片

enqueue:

Retrofit 原理浅析 二_第32张图片

创建一个Okhttp3.call 

Retrofit 原理浅析 二_第33张图片

然后通过okhttp3的call调用enqueue

Retrofit 原理浅析 二_第34张图片

Retrofit 原理浅析 二_第35张图片

通过Fastory 创建call 然后判断方法:

Retrofit 原理浅析 二_第36张图片

然后判断注解和传入的类型进行判断拼接

parseResopose 解析数据

Retrofit 原理浅析 二_第37张图片

convert 最终是调用配置的

Retrofit 原理浅析 二_第38张图片

转为JsonReader

Retrofit 原理浅析 二_第39张图片

RxJava

callAdapter 判断是否是这几种

Retrofit 原理浅析 二_第40张图片

你可能感兴趣的:(retrofit)