OkHttp和Retrofit

一.OkHttp

OkHttp是Square開源的輕量級框架,是一款現(xiàn)代、高效、快速的Android版Http client。

1.OkHttp特性:

它的設(shè)計和實現(xiàn)的首要目標(biāo)便是高效,有如下特性:

??支持SPDY、連接池、Gzip和Http緩存(記住第一條可直接推及記起下面四條,感覺萌萌噠^_^);

??支持SPDY,因此可以同一IP多個連接共享同一個socket(SPDY并不是一種用于替代HTTP的協(xié)議,而是對HTTP協(xié)議的增強,具體請自行百度);

??在Http/2不可用時, 連接池可極大減少延時;

??支持Gzip壓縮響應(yīng)體,降低傳輸內(nèi)容的大小;

??支持Http緩存,避免重復(fù)請求;

??服務(wù)器配置多IP情況下,當(dāng)前IP請求失敗,支持自動切換到其他IP;

??使用Okio來簡化數(shù)據(jù)的訪問與存儲,提高性能;

??OkHttp還處理了代理服務(wù)器問題和SSL握手失敗問題;

2.OkHttp使用

OkHttp主要支持以下使用方式(記住多少算多少吧):

? 異步get請求;

??異步post請求;

??異步文件上傳;

??異步文件下載;

??異步上傳Multipart文件;(多種類型文件合在一起,同一個請求上傳)

??上傳下載的進度回調(diào);

?? 加載圖片;

?? 支持請求回調(diào),直接返回對象、對象集合;

?? 支持session的保持;

?? 支持自簽名網(wǎng)站https的訪問,提供方法設(shè)置下證書就行;

?? 支持取消某個請求;

3.OkHttp流程圖

為了幫助記憶,留下Okhttp請求流程圖(用于忽悠人):

Okhttp請求流程圖

4. OkHttp的缺點

???是消息回來需要切到主線程,主線程要自己去寫。

???調(diào)用比較復(fù)雜,需要自己進行封裝。

???緩存失效:網(wǎng)絡(luò)請求時一般都會獲取手機的一些硬件或網(wǎng)絡(luò)信息,比如使用的網(wǎng)絡(luò)環(huán)境。同時為了信息傳輸?shù)陌踩?,可能還會對請求進行加密。在這些情況下OkHttp的緩存系統(tǒng)就會失效了,導(dǎo)致用戶在無網(wǎng)絡(luò)情況下不能訪問緩存。

緩存失效解決方案:先過濾可變參數(shù),然后進行手動緩存;不要使用隨網(wǎng)絡(luò)狀態(tài)變化的參數(shù);

參見微博:OkHttp緩存失效

二 Retrofit

Retrofit是Square開源的一款適用于Android網(wǎng)絡(luò)請求的框架。Retrofit底層是基于OkHttp實現(xiàn)的,與其他網(wǎng)絡(luò)框架不同的是,它更多使用運行時注解的方式提供功能。

1.Retrofit優(yōu)缺點

優(yōu)點:

?? 可以配置不同HTTP client來實現(xiàn)網(wǎng)絡(luò)請求,如okhttp、httpclient等;

?? 請求的方法參數(shù)注解都可以定制;

?? 支持同步、異步和RxJava;

?? 超級解耦;

?? 可以配置不同的反序列化工具來解析數(shù)據(jù),如json、xml等;

?? 使用非常方便靈活;

?? 框架使用了很多設(shè)計模式(感興趣的可以看看源碼學(xué)習(xí)學(xué)習(xí));

附加Stay大神整理的retrofit源碼流程圖:

retrofit源碼流程圖

缺點:

?? 不能接觸序列化實體和響應(yīng)數(shù)據(jù);

?? 執(zhí)行的機制太嚴(yán)格;

?? 使用轉(zhuǎn)換器比較低效;

?? 只能支持簡單自定義參數(shù)類型;

2.Retrofit注解

Retrofit注解分為三大類,分別是HTTP請求方法注解(8種)、標(biāo)記類注解(3種)和參數(shù)類注解(11種)。

??HTTP請求方法注解:GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、HTTP

??標(biāo)記類注解:FormUrlEncoded、Multipart、Streaming

??參數(shù)類注解:Headers、Header、Body、Field、FieldMap、Part、PartMap、Path、Query、QueryMap、Url

至于具體注解的使用和實例,請看這篇博文吧:Retrofit2完全教程


三.OkHttp和Retrofit的聯(lián)系

Retrofit底層對網(wǎng)絡(luò)的訪問默認(rèn)是基于okhttp,不過Retrofit非常適合于restful url格式的請求,更多使用注解的方式提供功能,下面這個網(wǎng)絡(luò)請求流程圖,可以更直觀的理解OkHttp和Retrofit的關(guān)系。

Retrofit框架網(wǎng)絡(luò)請求流程圖

網(wǎng)絡(luò)請求:APP發(fā)起網(wǎng)絡(luò)請求,Retrofit通過注解配置請求參數(shù)、Header、Url之后,通過OkHttp發(fā)生網(wǎng)絡(luò)請求給服務(wù)器。

服務(wù)器響應(yīng):服務(wù)器返回響應(yīng)數(shù)據(jù),OkHttp將數(shù)據(jù)傳遞給Retrofit,再把數(shù)據(jù)直接傳遞給APP,界面刷新反饋結(jié)果給用戶。

OkHttp和Retrofit都是網(wǎng)絡(luò)開源框架,但是他們之間的區(qū)別請不要混淆:

職責(zé)不同:

??Retrofit主要負責(zé)應(yīng)用層面的封裝,就是說主要面向開發(fā)者,方便使用,比如請求參數(shù),響應(yīng)數(shù)據(jù)的處理,錯誤處理等等。

??OkHttp主要負責(zé)socket部分的優(yōu)化,比如多路復(fù)用,buffer緩存,數(shù)據(jù)壓縮等等。

封裝不同:

??Retrofit封裝了具體的請求,線程切換以及數(shù)據(jù)轉(zhuǎn)換。

??OkHttp 是基于Http協(xié)議封裝的一套請求客戶端,雖然它也可以開線程,但根本上它更偏向真正的請求,跟HttpClient, HttpUrlConnection的職責(zé)是一樣的。

另外,網(wǎng)上一般都推薦RxJava+Retrofit+OkHttp框架,Retrofit負責(zé)請求的數(shù)據(jù)和請求的結(jié)果,使用接口的方式呈現(xiàn),OkHttp負責(zé)請求的過程,RxJava負責(zé)異步,各種線程之間的切換,用起來炒雞爽。

四.一些建議

由于這兩個框架是這周開始接觸的,根本沒時間去嘗試寫demo測試,直接看了《Android進階之光》的框架篇和網(wǎng)上的一些資料,其實一頭懵逼。只是表面上懂一點點皮毛,建議大家可以嘗試去了解應(yīng)用場景,嘗試在項目中或者自己寫個demo去實踐一下,然后再去看源碼,先理清楚具體調(diào)用流程,再根據(jù)優(yōu)點和特性,看框架源碼的具體實現(xiàn)。

參考資料:

《Android進階之光》

OKhttp官方網(wǎng)站

網(wǎng)絡(luò)框架三部曲:OkHttp筆記

Retrofit分析-漂亮的解耦套路

這是一份很詳細的 Retrofit 2.0 使用教程(含實例講解)

OkHttp框架緩存的缺陷

知乎:okhttp,retrofit,android-async-http,volley應(yīng)該選擇哪一個

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,323評論 25 708
  • Okhttp和Retrofit的出現(xiàn)已經(jīng)有很長一段時間了,一直都沒有去了解過它們,現(xiàn)在正好有一個機會去了解和使用,...
    淡雅如蘭_往事隨風(fēng)閱讀 1,006評論 2 2
  • 又是一年中秋佳節(jié),祝各位中秋節(jié)快樂。 今天我們來聊聊這個最近很火的網(wǎng)絡(luò)請求庫retrofit,在此基礎(chǔ)上會延伸出一...
    涅槃1992閱讀 7,960評論 13 133
  • 你就在我的眼前摔倒, 可能真的不疼, 但我怎么能原諒自己, 當(dāng)初沒在這里多種一些草!
    簡村小吹閱讀 222評論 3 4
  • 原以為挺瑪麗蘇劇情的電影,男主帥我一臉,女主也就是那個傻白甜的套路風(fēng)格,所以從一開始,我就是為了完成這部電影而看的...
    柴米有顏閱讀 688評論 0 1

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