Retrofit 基礎(chǔ)原理之總結(jié)

簡(jiǎn)述:

    Retrofit是一個(gè)Android網(wǎng)絡(luò)框架,是一個(gè)對(duì)OKHttp框架的簡(jiǎn)單封裝,所以其內(nèi)部實(shí)現(xiàn)原理實(shí)
際上也基于OKHttp的請(qǐng)求方式的。
    Retrofit采用注解方式開(kāi)發(fā),通過(guò)注解構(gòu)建不同的請(qǐng)求和請(qǐng)求的參數(shù),省去了創(chuàng)建大量類似的
請(qǐng)求和方法,實(shí)際上這些參數(shù)最終都會(huì)在OkHttp中組合成一個(gè)完整的Http的請(qǐng)求(包括請(qǐng)求的頭和請(qǐng)求體),
    并通過(guò)OkHttp框架進(jìn)行發(fā)送。

1.網(wǎng)絡(luò)請(qǐng)求:

真正執(zhí)行網(wǎng)絡(luò)請(qǐng)求的還是OkHttp的Call對(duì)象:
1.同步請(qǐng)求為call.execute();
2.異步請(qǐng)求為call.enqueue();

2.網(wǎng)絡(luò)請(qǐng)求流程梳理:

a.通過(guò)解析 網(wǎng)絡(luò)請(qǐng)求的接口的注解 配置 網(wǎng)絡(luò)請(qǐng)求參數(shù)
b.通過(guò) 動(dòng)態(tài)代理 生成網(wǎng)絡(luò)請(qǐng)求對(duì)象
c.通過(guò) *網(wǎng)絡(luò)請(qǐng)求適配器* 將 網(wǎng)絡(luò)請(qǐng)求對(duì)象 進(jìn)行平臺(tái)適配
d.通過(guò) *網(wǎng)絡(luò)請(qǐng)求執(zhí)行器* 發(fā)送網(wǎng)絡(luò)請(qǐng)求
e.通過(guò) *數(shù)據(jù)轉(zhuǎn)換器* 解析服務(wù)器返回的數(shù)據(jù)
f.通過(guò) *回調(diào)執(zhí)行器* 切換線程(子線程->主線程)
g.用戶在主線程處理返回結(jié)果

上述2角色解析

3.網(wǎng)絡(luò)請(qǐng)求適配器:

CallApdater就是Call的適配器,retrofit兼容各種平臺(tái),CallApdater,如Guava、java8、RxJava、RxJava2、Scala等 
Java8CallAdapterFactory其他同理 ExecutorCallApdaterFactroy是Android默認(rèn)。

4.網(wǎng)絡(luò)請(qǐng)求執(zhí)行器:

創(chuàng)建處理的Call對(duì)象,它的作用就是創(chuàng)建Http請(qǐng)求,retrofit默認(rèn)使用的就是OKhttp3.call。

5.數(shù)據(jù)轉(zhuǎn)換器:

服務(wù)器返回的數(shù)據(jù)各種各樣,retrofit為我們封裝了各類數(shù)據(jù)的轉(zhuǎn)換器,將返回?cái)?shù)據(jù)解析成我們需要的數(shù)據(jù)類型;
如Guava、java8、jaxb、Scalars等 GsonConverterFactroy其他同理

Refrofit的數(shù)據(jù)轉(zhuǎn)換的流程:(JavaBean類型)
    a.拿到某個(gè)ApiService方法的返回值JavaBean類型returnType(ServiceMethod中的getGenericReturnType()方法)。
    b.根據(jù)returnType的信息,通過(guò)ConvertFactory找到一個(gè)對(duì)應(yīng)的Converter。
    c.將OKhttp的數(shù)據(jù)源 轉(zhuǎn)換成returnType類型的數(shù)據(jù)。

返回json中有非常字符解決方案:
    Retrofit retrofit = new Retrofit.Builder()
                        .baseUrl(baseUrl)
                        .addConverterFactory(GsonConverterFactory.create())//重點(diǎn)
                        .build();

6.回調(diào)執(zhí)行器:

它的主要作用就是線程轉(zhuǎn)換,把子線程切換到主線程,將最后的OKhttp的請(qǐng)求結(jié)果通過(guò)
callbackExecutor使用回調(diào)給handler 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容