网络通信八步:
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;
…………