深入底層,詳解retrofit封裝okhttp請求
OkHttp是Square開源的輕量級框架,一款高效、快速的Android版Http client,是當下最常運用的框架之一,也是面試必問的知識方向。
? 無法適配自動進行線程的切換,消息回來需要切到主線程,主線程要自己去寫。
? 調(diào)用比較復(fù)雜,需要自己進行封裝。
? 用戶網(wǎng)絡(luò)請求的接口配置繁瑣,尤其是需要配置請求body,請求頭,參數(shù)的時候;
? 數(shù)據(jù)解析過程需要用戶手動拿到responsbody進行解析,不能復(fù)用;
? 緩存失效:網(wǎng)絡(luò)請求時一般都會獲取手機的一些硬件或網(wǎng)絡(luò)信息,比如使用的網(wǎng)絡(luò)環(huán)境。同時為了信息傳輸?shù)陌踩裕赡苓€會對請求進行加密。在這些情況下OkHttp的緩存系統(tǒng)就會失效了,導(dǎo)致用戶在無網(wǎng)絡(luò)情況下不能訪問緩存。
而解決這些問題的首選方案就是用 Retrofit ,基于OkHttp的一個高解耦的網(wǎng)絡(luò)框架。
大家一般都推薦RxJava+Retrofit+OkHttp框架。
Retrofit主要負責應(yīng)用層面的封裝,比如:具體的請求、線程切換、數(shù)據(jù)轉(zhuǎn)換。主要面向開發(fā)者,方便使用,比如請求參數(shù),響應(yīng)數(shù)據(jù)的處理,錯誤處理等;
OkHttp負責請求的過程;
RxJava負責異步,各種線程之間的切換
搭配使用非常便利。
下面讓我們來進行一個對比,看一下,Retrofit是如何來封裝Okhttp請求的。

大體的流程都是:
創(chuàng)建網(wǎng)絡(luò)請求實體client->構(gòu)建真正的網(wǎng)絡(luò)請求-> 將網(wǎng)絡(luò)請求方案與真正的網(wǎng)絡(luò)請求實體結(jié)合構(gòu)成一個請求Call->執(zhí)行網(wǎng)絡(luò)請求->處理返回數(shù)據(jù)->處理Android 平臺的線程問題。
通過對比我們可以發(fā)現(xiàn):
1. OkHttp創(chuàng)建的是OkhttpClient,然而retrofit創(chuàng)建的是Retrofit實例
2. 構(gòu)建藍色的Requet的方案,retrofit是通過注解來進行的適配
3. 配置Call的過程中,retrofit是利用Adapter適配的Okhttp的Call
4. 相對okhttp,retrofit會對responseBody進行自動Gson解析
5. 相對okhttp,retrofit會自動的完成線程的切換。
面試的時候,以上Retrofit和Okhttp相關(guān)的知識點一般都會被問到。




通過上面的面試題分享我們不難發(fā)現(xiàn),大廠面試很多題目都是問的基礎(chǔ),但是還是有很多人回答不上來,每年都有很多朋友掛在上面,歸根結(jié)底,就是基礎(chǔ)知識掌握的不夠牢靠。
本次特邀前愛奇藝高級工程師lance老師和前三星/小米高級研發(fā)經(jīng)理Alvin老師給大家?guī)怼禣kHttp源碼分析與Retrofit中的注解》的精品小課,用兩節(jié)課的時間帶你深度解析OkHttp源碼與Retrofit封裝,明白Retrofit的原理。
1042頁阿里大神的《設(shè)計思想與框架學(xué)習筆記》

Android面試寶典:《2056頁Android面試題大合集(含答案解析)》

適合人群
具備移動開發(fā)基礎(chǔ);
具備一定自學(xué)能力;
立志成為高級工程師、架構(gòu)師的安卓開發(fā)者;
>>授課講師
某游戲公司主程,前愛奇藝高級工程師
專精領(lǐng)域:移動平臺開發(fā),NDK、架構(gòu)、性能優(yōu)化;
前三星高級研發(fā)經(jīng)理,國內(nèi)首批Android底層技術(shù)導(dǎo)航人
專精領(lǐng)域:精通Android FrameWork源碼及性能優(yōu)化;三星手機Rom核心架構(gòu)設(shè)計,專注NDK底層設(shè)計與開發(fā)。
>>課程排期
5月7日:看架構(gòu)師解剖retrofit源碼內(nèi)核
retrofit如何將接口轉(zhuǎn)變成網(wǎng)絡(luò)請求的原理
24種設(shè)計模式中的9種是如何構(gòu)建Retrofit架構(gòu)體系的
以不變應(yīng)萬變的網(wǎng)絡(luò)請求架構(gòu)搭建方案
retrofit架構(gòu)設(shè)計優(yōu)化方案
retrofit這個SDK的架構(gòu)設(shè)計原理
5月8日:一節(jié)課真正讀懂OkHttp
使用OkHttp幾行代碼,內(nèi)部是怎么完成一次請求的?
學(xué)完線程池你會用嗎?OkHttp中的線程池
不止是概念,攔截器對責任鏈設(shè)計模式的實戰(zhàn)
okhttp為什么會使用okio而不是用普通io
Http怎樣才能使用緩存?
怎么復(fù)用Socket?連接池實現(xiàn)原理
文中資料免費贈送訓(xùn)練營學(xué)員
加助手蘭蘭微信報名訓(xùn)練營
