网络通信八步:
1) 创建retrofit实例。
2) 定义一个网络请求接口并为接口中的方法添加注解。
3) 通过 动态代理 生成 网络请求对象。
4) 通过 网络请求适配器 将 网络请求对象 进行平台适配。
5) 通过 网络请求执行器 发送网络请求。
6) 通过 数据转换器 解析数据。
7) 通过 回掉执行器 切换线程。
8) 用户在主线程处理返回结果。
【源码解析】
1) 创建retrofit实例。
2) 定义一个网络请求接口并为接口中的方法添加注解。
3) 通过 动态代理 生成 网络请求对象。
4) 通过 网络请求适配器 将 网络请求对象 进行平台适配。
5) 通过 网络请求执行器 发送网络请求。
6) 通过 数据转换器 解析数据。
7) 通过 回掉执行器 切换线程。
8) 用户在主线程处理返回结果。
【源码解析】
使用的构建着模式。七个重要的成员变量
public final class Retrofit { // key是Method,也就是我们HTTP的请求方法。 // values ServiceMethod,代表网络请求接口中对它方法进行注解之后, // 我们要通过解析,然后解析后的对象,我们就叫它ServiceMethod。 // serviceMethodCache主要用于缓存的, // 比如:存储一些网络请求相关配置,网络请求的方法,数据转换器,网络适配器,等等。 private final Map<Method, ServiceMethod<?, ?>> serviceMethodCache = new ConcurrentHashMap<>(); // 请求网络OKHTTP的工厂。 final okhttp3.Call.Factory callFactory; // 网络请求的基地址。(相对地址是接口注解当中的)。 final HttpUrl baseUrl; // 数据转换器工厂集合。转换成用户的java对象。 final List<Converter.Factory> converterFactories; // 网络工厂适配器集合 final List<CallAdapter.Factory> callAdapterFactories; // 用于执行回掉的,因为要处理异步的网络请求。 final @Nullable Executor callbackExecutor; // 表示的是一个标志位,它就是说是否立需要即解析接口当中的方法。 final boolean validateEagerly; …………