一、Retrofit流程圖
retrofit1.png
二淀歇、Retrofit調(diào)用邏輯圖
retrofit 2.png
三易核、Retrofit 架構(gòu)圖
retrofit3.jpg
四、源碼分析
(1)retrofit 類:入口類
(2)Platform 類:平臺劃分浪默、默認配置類
1牡直、Retrofit根據(jù)三個平臺分別處理:android、ios纳决、java8
我們這里只談android平臺
1碰逸、提供默認線程調(diào)度器:mianThreadExecutor()
2、提供默認適配器工廠:ExecutorCallAdapterFactory()
(3)ExecutorCallAdapterFactory 類:調(diào)度工廠類
(4)OkhttpCall 類:請求控制類
1阔加、持有ServiceMethod對象饵史。
2、通過ServiceMethod對象創(chuàng)建okhttp3.Call對象胜榔,并持有胳喷。
3、繼承Call接口夭织,實現(xiàn)enqueue()/excute()等方法吭露。并在其中調(diào)用okhttp3.Call的enqueue()/excute()方法,發(fā)起網(wǎng)絡(luò)請求摔癣。
4奴饮、解析response數(shù)據(jù),通過serviceMethod的responseConverter.covert()轉(zhuǎn)成需要的類型T择浊。
(5)ServiceMethod 類:請求封裝類
1戴卜、持有okhttp3.Call.Factory 的OkhttpClient對象
2、持有responseConverter 數(shù)據(jù)轉(zhuǎn)換對象
3琢岩、持有HttpUrl投剥、httpMethod、Headers担孔、MediaType等網(wǎng)絡(luò)請求元素江锨,用于在toRequest()方法中拼接request請求對象吃警。
(6)OkhttpClient 類:發(fā)起okhttp請求類
(7)Converter.Factory 類:數(shù)據(jù)轉(zhuǎn)換類
1、這個轉(zhuǎn)換類啄育,很簡單只有三個方法酌心。分別提供三種Converter對象。
2挑豌、而Converter類更簡單安券,只有一個convert()方法。
3氓英、Converter僅僅是用來將數(shù)據(jù)轉(zhuǎn)換而已侯勉。
(8)Executor 類:線程調(diào)度類
1、這個類在ExecutorCallbackCall類中被持有铝阐。
2址貌、功能也很單一,僅僅是用于異步處理的徘键,只有一個execute(Runnable r)一個方法练对。