
类型安全的连接

enqueue : 异步 切线程,会在队列中执行
execute : 同步 不切线程
Retrofit:Create

1.验证是否是接口 否则是类或者其他则报错 API Declarations must be interfaces
2.check . add 取出进行处理,然后添加到Colltions 中,如果有父接口则报错,不能是泛型
添加到队列

进一步验证

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

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

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

如果是Object的方法 则直接invoke
如果是java8平台特性方法,则过滤
然后 loadServiceMethod

ServiceMethod = Map 带缓存的加载




核心 invoke 方法:

创建OKHttpCall
创建adapt


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


OkhttpCall: dapte 最终执行OkhttpCall.adapte

执行Retrofit的Calladpe


通过工厂方法
在Retrofit初始化

调用者

调用者

调用,Retrofit的Builder



new Default



retrofit.enqueue 则执行的是executorCallbackCall 包着OkHttpCall
delegate = call
Execute 线程管理

切线程 然后执行回调
切线程的callbackExecute






切线程是 往 前台切换

enqueue:

创建一个Okhttp3.call

然后通过okhttp3的call调用enqueue


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

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

convert 最终是调用配置的
![]()

转为JsonReader

RxJava

callAdapter 判断是否是这几种















![Banana Pi [BPi-R3-Mini] 回顾和主线 ImmortalWrt 固件支持](https://img-blog.csdnimg.cn/f1e8d25c041f40728917e14d45f2e010.png)




