Retrofit2

作者: Wi1ls努力努力再努力 | 来源:发表于2020-12-18 15:57 被阅读0次

Retrofit
- Map<Method, ServiceMethod<?>> serviceMethodCache = new ConcurrentHashMap<>();[将Method解析后映射为ServiceMethod]
- okhttp3.Call.Factory callFactory <默认为OkHttpClient,用以产生Call>
- HttpUrl baseUrl
- List<Converter.Factory> converterFactories <从前往后遍历,使用返回非null的Converter.Factory>
- 默认 BuiltInConverters(), 用户自定义ConverterFactory列表,OptionalConverterFactory.INSTANCE
- List<CallAdapter.Factory> callAdapterFactories
- 同上,先遍历用户自定义CallAdapterFactory, 默认为DefaultCallAdapterFactory,参数为callbackExecutor,默认用以callback的线程切换到Main
- Executor callbackExecutor, 默认的DefaultCallAdapterFactory的线程池,用以切换callback到Main
- bool validateEagerly ,true:第一次创建interface时检验所有method, false:使用method时检验

create()@Retrofit:
    - Proxy.newProxyInstance()进行动态代理接口类, 调用loadServiceMethod(method).invoke()
    - loadServiceMethod()带缓存的method解析器,根据Method的注解配置,产生ServiceMethod
    - ServiceMethod的实现类的CallAdapter,调用createCallAdapter() -> callAdapter()@Retrofit -> 遍历CallAdapterFactories,获得合适的CallAdapter
    - 使用HttpServiceMethod$CallAdapter包裹上述获得的CallAdapter,并且有requestFactory【RequestFactory,负责配置Request】, callFactory[OkHttpClient],responseConverter[从Converter列表最早匹配]

- invoke()@ServiceMethod  实现在HttpServiceMethod  ,产生一个OkHttpCall(requestFactory, args, callFactory, responseConverter)
- adapter(call,args)@HttpServiceMethod$CallAdapter
-> adapter(call) @ 从callFatory获得的callAdapter,这里使用默认的DefaultCallAdapterFactory
- 这里的CallAdapter的adapter() 返回一个  ExecutorCallbaclCall(executor, call)[将response的callback丢到主线程];


- 随后用户调用enqueue()@ExecutorCallbackCall

- enqueue()@OkHttpCall[retrofit类]

- createRawCall(),使用callFactory【OkHttpClient】.newCall(requestFactory【RequestFactory】.create(args))产生一个okhttp3.Call
    - create(args)@requestFactory 生成一个Request, RequestFactory与Method关联的
    - newCall()@OkHttpClient 生成一个RealCall()对象,包含OkHttpClient, Request,
- 随后调用enqueue()@RawCall
- parseResponse()@OkHttpCall  将okhttp3.Response包裹为Retrofit2定义的Response
    - parseResponse()的过程中会用Converter进行转换再返回

---剩下的都是OkHttp进行网络请求的部分了

相关文章

网友评论

      本文标题:Retrofit2

      本文链接:https://www.haomeiwen.com/subject/eyxfnktx.html