一、Retrofit流程圖
retrofit1.png
二、Retrofit調(diào)用邏輯圖
retrofit 2.png
三、Retrofit 架構(gòu)圖
retrofit3.jpg
四、源碼分析
(1)retrofit 類:入口類
(2)Platform 類:平臺(tái)劃分、默認(rèn)配置類
1、Retrofit根據(jù)三個(gè)平臺(tái)分別處理:android、ios、java8
我們這里只談android平臺(tái)
1、提供默認(rèn)線程調(diào)度器:mianThreadExecutor()
2、提供默認(rèn)適配器工廠:ExecutorCallAdapterFactory()
(3)ExecutorCallAdapterFactory 類:調(diào)度工廠類
(4)OkhttpCall 類:請(qǐng)求控制類
1、持有ServiceMethod對(duì)象。
2、通過(guò)ServiceMethod對(duì)象創(chuàng)建okhttp3.Call對(duì)象,并持有。
3、繼承Call接口,實(shí)現(xiàn)enqueue()/excute()等方法。并在其中調(diào)用okhttp3.Call的enqueue()/excute()方法,發(fā)起網(wǎng)絡(luò)請(qǐng)求。
4、解析response數(shù)據(jù),通過(guò)serviceMethod的responseConverter.covert()轉(zhuǎn)成需要的類型T。
(5)ServiceMethod 類:請(qǐng)求封裝類
1、持有okhttp3.Call.Factory 的OkhttpClient對(duì)象
2、持有responseConverter 數(shù)據(jù)轉(zhuǎn)換對(duì)象
3、持有HttpUrl、httpMethod、Headers、MediaType等網(wǎng)絡(luò)請(qǐng)求元素,用于在toRequest()方法中拼接request請(qǐng)求對(duì)象。
(6)OkhttpClient 類:發(fā)起okhttp請(qǐng)求類
(7)Converter.Factory 類:數(shù)據(jù)轉(zhuǎn)換類
1、這個(gè)轉(zhuǎn)換類,很簡(jiǎn)單只有三個(gè)方法。分別提供三種Converter對(duì)象。
2、而Converter類更簡(jiǎn)單,只有一個(gè)convert()方法。
3、Converter僅僅是用來(lái)將數(shù)據(jù)轉(zhuǎn)換而已。
(8)Executor 類:線程調(diào)度類
1、這個(gè)類在ExecutorCallbackCall類中被持有。
2、功能也很單一,僅僅是用于異步處理的,只有一個(gè)execute(Runnable r)一個(gè)方法。