1、retrofit总流程

  • 接口-注解(Build Request)
  • 网络恳求履行器 Call
  • 网络恳求适配器
    • CallAdapter假如用户挑选了,能够经过addAdapterFactory(RxJavaCallAdapterFactory.create())将OkhttpCall目标转换成RxJava渠道的Call
  • 网络恳求履行器
    • 署理模式
  • 数据转换器

Retrofit不完全详解

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目标。

Retrofit不完全详解

2.2、mRetrofit.create()得到署理目标

ICommonService commonService = mRetrofit.create(ICommonService.class);//CommonServiceProxy
  • create里其实用了动态署理,详细看我这篇设计模式(2)-动态署理-大白话版 – ()

  • 也便是commonService的任何函数都会调用invoke, 这个invoke函数也便是retrofit里边 invoke函数。所以,动态署理能够署理一切的接口,让一切的接口都走 invoke函数, 那么ICommonService里的哪些注解啥的就都被用来生成okhttpcall

  • 动态署理创立

Retrofit不完全详解

2.3 commonService创立call

Call<Object> objectCall = commonService.addGiveLike(1001);

Retrofit不完全详解

Mehtod和args传进了OkhttpCall,

Request request = serviceMethod.toRequest(args);

然后serviceMethod经过args参数创立了一个request,然后request生成了okhttp的call,后面的不在这一步,我大约讲一下(然后这个call enqueue()或许execute(),生成response,经过callSuccess()传出去)

serviceMethod.callAdapter.adapt(okHttpCall);

Retrofit不完全详解
Retrofit不完全详解

  • 默许将okhttpcall转为适配合适的call(ExecutorCallbackCall)

    • defaultCallAdapterFactory是对executorCallAdapterFactory的封装。
    • executorCallAdapterFactory则是对callbackExecutor的封装,便是一个署理。

Retrofit不完全详解

Retrofit不完全详解

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里创立的。

Retrofit不完全详解

Retrofit不完全详解

Retrofit不完全详解

3、时序图总结

Retrofit不完全详解

Retrofit不完全详解