1、retrofit总流程
- 接口-注解(Build Request)
- 网络恳求履行器 Call
-
网络恳求适配器
- CallAdapter假如用户挑选了,能够经过addAdapterFactory(RxJavaCallAdapterFactory.create())将
OkhttpCall目标转换成RxJava渠道的Call
- CallAdapter假如用户挑选了,能够经过addAdapterFactory(RxJavaCallAdapterFactory.create())将
-
网络恳求履行器
- 署理模式
- 数据转换器
2、署理实例创立进程
Retrofit mRetrofit = new Retrofit.Builder().baseUrl("myurl").
addConverterFactory(GsonConverterFactory.create(new Gson()))
// .addCallAdapterFactory(RxJava3CallAdapterFactory.create())
.build();
CommonService commonService = mRetrofit.create(CommonService.class);//CommonServiceProxy
2.1、创立 mRetrofit
- 有哪些参数
- baseURL
- 网络恳求的url地址
- callFactory
- 网络恳求工厂,实际上就一个Okhttp
- callbackExecutor
- 假如不自行设置,Retrofit会根据渠道设置一个默许的Executor。callbackExecutor是Retrofit.Callback接口中的一个特点,能够用来指定回调履行的线程,例如在异步恳求数据时,能够在主线程之外的线程履行回调。
- adapterFactories
- 将Call转化,默许的话,OKhttp履行的结果会被handler来履行线程切换操作。假如需要支撑RxJava,就能够经过addAdapterFactory(RxJavaCallAdapterFactory.create())将Call目标转换成RxJava渠道的Call1。
- converterFactories
- 转换数据用的,比如string转为jsonbeanaddConverterFactory(GsonConverterFactory.create()),便是设置回来的数据支撑转换为Gson目标。
2.2、mRetrofit.create()得到署理目标
ICommonService commonService = mRetrofit.create(ICommonService.class);//CommonServiceProxy
-
create里其实用了动态署理,详细看我这篇设计模式(2)-动态署理-大白话版 – ()
-
也便是commonService的任何函数都会调用invoke, 这个invoke函数也便是retrofit里边 invoke函数。所以,动态署理能够署理一切的接口,让一切的接口都走 invoke函数, 那么ICommonService里的哪些注解啥的就都被用来生成okhttpcall
-
动态署理创立
2.3 commonService创立call
Call<Object> objectCall = commonService.addGiveLike(1001);
Mehtod和args传进了OkhttpCall,
Request request = serviceMethod.toRequest(args);
然后serviceMethod经过args参数创立了一个request,然后request生成了okhttp的call,后面的不在这一步,我大约讲一下(然后这个call enqueue()或许execute(),生成response,经过callSuccess()传出去)
serviceMethod.callAdapter.adapt(okHttpCall);
-
默许将okhttpcall转为适配合适的call(ExecutorCallbackCall)
- defaultCallAdapterFactory是对executorCallAdapterFactory的封装。
- executorCallAdapterFactory则是对callbackExecutor的封装,便是一个署理。
2.4 call恳求然后解析数据
objectCall.enqueue(new Callback<Object>() {
@Override
public void onResponse(Call<Object> call, Response<Object> response) {
}
@Override
public void onFailure(Call<Object> call, Throwable t) {
}
});
这个responseConverter便是serviceMehtod里的,也便是retrofit里创立的。
3、时序图总结