簡述:
Retrofit是一個Android網(wǎng)絡框架,是一個對OKHttp框架的簡單封裝,所以其內(nèi)部實現(xiàn)原理實
際上也基于OKHttp的請求方式的蟆淀。
Retrofit采用注解方式開發(fā),通過注解構建不同的請求和請求的參數(shù)账阻,省去了創(chuàng)建大量類似的
請求和方法,實際上這些參數(shù)最終都會在OkHttp中組合成一個完整的Http的請求(包括請求的頭和請求體)椎麦,
并通過OkHttp框架進行發(fā)送宰僧。
1.網(wǎng)絡請求:
真正執(zhí)行網(wǎng)絡請求的還是OkHttp的Call對象:
1.同步請求為call.execute();
2.異步請求為call.enqueue();
2.網(wǎng)絡請求流程梳理:
a.通過解析 網(wǎng)絡請求的接口的注解 配置 網(wǎng)絡請求參數(shù)
b.通過 動態(tài)代理 生成網(wǎng)絡請求對象
c.通過 *網(wǎng)絡請求適配器* 將 網(wǎng)絡請求對象 進行平臺適配
d.通過 *網(wǎng)絡請求執(zhí)行器* 發(fā)送網(wǎng)絡請求
e.通過 *數(shù)據(jù)轉(zhuǎn)換器* 解析服務器返回的數(shù)據(jù)
f.通過 *回調(diào)執(zhí)行器* 切換線程(子線程->主線程)
g.用戶在主線程處理返回結(jié)果
上述2角色解析
3.網(wǎng)絡請求適配器:
CallApdater就是Call的適配器,retrofit兼容各種平臺观挎,CallApdater琴儿,如Guava、java8嘁捷、RxJava造成、RxJava2、Scala等
Java8CallAdapterFactory其他同理 ExecutorCallApdaterFactroy是Android默認雄嚣。
4.網(wǎng)絡請求執(zhí)行器:
創(chuàng)建處理的Call對象晒屎,它的作用就是創(chuàng)建Http請求,retrofit默認使用的就是OKhttp3.call缓升。
5.數(shù)據(jù)轉(zhuǎn)換器:
服務器返回的數(shù)據(jù)各種各樣鼓鲁,retrofit為我們封裝了各類數(shù)據(jù)的轉(zhuǎn)換器,將返回數(shù)據(jù)解析成我們需要的數(shù)據(jù)類型港谊;
如Guava骇吭、java8、jaxb歧寺、Scalars等 GsonConverterFactroy其他同理
Refrofit的數(shù)據(jù)轉(zhuǎn)換的流程:(JavaBean類型)
a.拿到某個ApiService方法的返回值JavaBean類型returnType(ServiceMethod中的getGenericReturnType()方法)燥狰。
b.根據(jù)returnType的信息棘脐,通過ConvertFactory找到一個對應的Converter。
c.將OKhttp的數(shù)據(jù)源 轉(zhuǎn)換成returnType類型的數(shù)據(jù)龙致。
返回json中有非常字符解決方案:
Retrofit retrofit = new Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(GsonConverterFactory.create())//重點
.build();
6.回調(diào)執(zhí)行器:
它的主要作用就是線程轉(zhuǎn)換蛀缝,把子線程切換到主線程,將最后的OKhttp的請求結(jié)果通過
callbackExecutor使用回調(diào)給handler