Retrofit 基础原理之总结

简述:

    Retrofit是一个Android网络框架,是一个对OKHttp框架的简单封装,所以其内部实现原理实
际上也基于OKHttp的请求方式的。
    Retrofit采用注解方式开发,通过注解构建不同的请求和请求的参数,省去了创建大量类似的
请求和方法,实际上这些参数最终都会在OkHttp中组合成一个完整的Http的请求(包括请求的头和请求体),
    并通过OkHttp框架进行发送。

1.网络请求:

真正执行网络请求的还是OkHttp的Call对象:
1.同步请求为call.execute();
2.异步请求为call.enqueue();

2.网络请求流程梳理:

a.通过解析 网络请求的接口的注解 配置 网络请求参数
b.通过 动态代理 生成网络请求对象
c.通过 *网络请求适配器* 将 网络请求对象 进行平台适配
d.通过 *网络请求执行器* 发送网络请求
e.通过 *数据转换器* 解析服务器返回的数据
f.通过 *回调执行器* 切换线程(子线程->主线程)
g.用户在主线程处理返回结果

上述2角色解析

3.网络请求适配器:

CallApdater就是Call的适配器,retrofit兼容各种平台,CallApdater,如Guava、java8、RxJava、RxJava2、Scala等 
Java8CallAdapterFactory其他同理 ExecutorCallApdaterFactroy是Android默认。

4.网络请求执行器:

创建处理的Call对象,它的作用就是创建Http请求,retrofit默认使用的就是OKhttp3.call。

5.数据转换器:

服务器返回的数据各种各样,retrofit为我们封装了各类数据的转换器,将返回数据解析成我们需要的数据类型;
如Guava、java8、jaxb、Scalars等 GsonConverterFactroy其他同理

Refrofit的数据转换的流程:(JavaBean类型)
    a.拿到某个ApiService方法的返回值JavaBean类型returnType(ServiceMethod中的getGenericReturnType()方法)。
    b.根据returnType的信息,通过ConvertFactory找到一个对应的Converter。
    c.将OKhttp的数据源 转换成returnType类型的数据。

返回json中有非常字符解决方案:
    Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .addConverterFactory(GsonConverterFactory.create())//重点
                        .build();

6.回调执行器:

它的主要作用就是线程转换,把子线程切换到主线程,将最后的OKhttp的请求结果通过
callbackExecutor使用回调给handler 

你可能感兴趣的:(Retrofit 基础原理之总结)