类型安全的连接
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 判断是否是这几种