Retrofit
- Map<Method, ServiceMethod<?>> serviceMethodCache = new ConcurrentHashMap<>();[將Method解析后映射為ServiceMethod]
- okhttp3.Call.Factory callFactory <默認為OkHttpClient,用以產(chǎn)生Call>
- HttpUrl baseUrl
- List<Converter.Factory> converterFactories <從前往后遍歷,使用返回非null的Converter.Factory>
- 默認 BuiltInConverters(), 用戶自定義ConverterFactory列表波附,OptionalConverterFactory.INSTANCE
- List<CallAdapter.Factory> callAdapterFactories
- 同上供屉,先遍歷用戶自定義CallAdapterFactory, 默認為DefaultCallAdapterFactory,參數(shù)為callbackExecutor京景,默認用以callback的線程切換到Main
- Executor callbackExecutor茂装, 默認的DefaultCallAdapterFactory的線程池,用以切換callback到Main
- bool validateEagerly 瘾晃,true:第一次創(chuàng)建interface時檢驗所有method, false:使用method時檢驗
create()@Retrofit:
- Proxy.newProxyInstance()進行動態(tài)代理接口類幻妓, 調(diào)用loadServiceMethod(method).invoke()
- loadServiceMethod()帶緩存的method解析器蹦误,根據(jù)Method的注解配置劫拢,產(chǎn)生ServiceMethod
- ServiceMethod的實現(xiàn)類的CallAdapter,調(diào)用createCallAdapter() -> callAdapter()@Retrofit -> 遍歷CallAdapterFactories强胰,獲得合適的CallAdapter
- 使用HttpServiceMethod$CallAdapter包裹上述獲得的CallAdapter舱沧,并且有requestFactory【RequestFactory,負責配置Request】, callFactory[OkHttpClient],responseConverter[從Converter列表最早匹配]
- invoke()@ServiceMethod 實現(xiàn)在HttpServiceMethod ,產(chǎn)生一個OkHttpCall(requestFactory, args, callFactory, responseConverter)
- adapter(call,args)@HttpServiceMethod$CallAdapter
-> adapter(call) @ 從callFatory獲得的callAdapter偶洋,這里使用默認的DefaultCallAdapterFactory
- 這里的CallAdapter的adapter() 返回一個 ExecutorCallbaclCall(executor, call)[將response的callback丟到主線程];
- 隨后用戶調(diào)用enqueue()@ExecutorCallbackCall
- enqueue()@OkHttpCall[retrofit類]
- createRawCall()熟吏,使用callFactory【OkHttpClient】.newCall(requestFactory【RequestFactory】.create(args))產(chǎn)生一個okhttp3.Call
- create(args)@requestFactory 生成一個Request, RequestFactory與Method關(guān)聯(lián)的
- newCall()@OkHttpClient 生成一個RealCall()對象玄窝,包含OkHttpClient牵寺, Request,
- 隨后調(diào)用enqueue()@RawCall
- parseResponse()@OkHttpCall 將okhttp3.Response包裹為Retrofit2定義的Response
- parseResponse()的過程中會用Converter進行轉(zhuǎn)換再返回
---剩下的都是OkHttp進行網(wǎng)絡(luò)請求的部分了