Retrofit

226 阅读1分钟

Retrofit采用了外观模式统一调用创建网络请求接口实例和网络请求参数配置的方法,具体细节是:

动态创建网络请求接口的实例(代理模式 - 动态代理) 创建 serviceMethod 对象(建造者模式 & 单例模式(缓存机制)) 对 serviceMethod 对象进行网络请求参数配置:通过解析网络请求接口方法的参数、返回值和注解类型,从Retrofit对象中获取对应的网络请求的url地址、网络请求执行器、网络请求适配器 & 数据转换器。(策略模式) 对 serviceMethod 对象加入线程切换的操作,便于接收数据后通过Handler从子线程切换到主线程从而对返回数据结果进行处理(装饰模式) 最终创建并返回一个OkHttpCall类型的网络请求对象

Retrofit默认使用OkHttp,即OkHttpCall类(实现了 retrofit2.Call接口) 但可以自定义选择自己需要的Call类

OkHttpCall提供了两种网络请求方式: 同步请求:OkHttpCall.execute() 异步请求:OkHttpCall.enqueue() 下面将详细介绍这两种网络请求方式。

对于OkHttpCall的enqueue()、execute()此处不往下分析,有兴趣的读者可以看OkHttp的源码

步骤1:对网络请求接口的方法中的每个参数利用对应ParameterHandler进行解析,再根据ServiceMethod对象创建一个OkHttp的Request对象 步骤2:使用OkHttp的Request发送网络请求; 步骤3:对返回的数据使用之前设置的数据转换器(GsonConverterFactory)解析返回的数据,最终得到一个Response对象