OkHttp, Retrofit, Volley應(yīng)該選擇哪一個?

今天在知乎看到一個問題,忍不住去回答了。

也在這里寫一份:okhttp,retrofit,android-async-http,volley應(yīng)該選擇哪一個?

我們來先說一個常識性的錯誤:

volley, retrofit, android-async-http 幫你封裝了具體的請求,線程切換以及數(shù)據(jù)轉(zhuǎn)換。

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

所以不要混淆。

-----以下純個人主觀見解

首先,我想即使你單純使用OkHttp,還是會再包一層的,這樣就等價于Volley之流的框架,只是封裝的好與壞而已。

android-async-http內(nèi)部實現(xiàn)是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系統(tǒng)自帶的了,不過它在最近的更新中將HttpClient的所有代碼copy了一份進(jìn)來,所以還能使用。

Volley是官方出的,volley在設(shè)計的時候是將具體的請求客戶端做了下封裝:HurlStack,也就是說可以支持HttpUrlConnection, HttpClient, OkHttp,相當(dāng)于模版模式吧,這樣解耦還是非常方便的,可以隨意切換,如果你之前使用過Volley,并習(xí)慣使用,那直接寫個OkHttp擴(kuò)展就行了。

Retrofit因為也是square出的,所以大家可能對它更崇拜些。Retrofit的跟Volley是一個套路,但解耦的更徹底:比方說通過注解來配置請求參數(shù),通過工廠來生成CallAdapter,Converter,你可以使用不同的請求適配器(CallAdapter), 比方說RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方說json, protobuff, xml, moshi等等。

超級解耦,里面涉及到超多設(shè)計模式,個人覺得是很經(jīng)典的學(xué)習(xí)案例。雖然支持Java8, Guava你可能也不需要用到。xml,protobuff等數(shù)據(jù)格式你也可能不需要解析。but,萬一遇到鬼了呢。

至于性能上,個人覺得這完全取決于請求client,也就是okhttp的性能,跟這些封裝工具沒太大關(guān)系。

至于RxJava,最好充分理解其原理之后再使用,別人云亦云,特別team人數(shù)多的情況下,總得有個完全精通的吧,萬一掉坑里了呢。。。

就說這么多啦,選最適合項目的,選大多數(shù)人選擇的,選簡單易用的,就這么個標(biāo)準(zhǔn)。

關(guān)于Retrofit源碼分析可以看我另外一些文章
Retrofit分析-漂亮的解耦套路
Retrofit分析-經(jīng)典設(shè)計模式案例

沒耐心自己分析源碼的同學(xué),還可以參考Stay錄制的視頻版
Retrofit分析-漂亮的解耦套路(視頻版)

另外怎么選擇開源library,可以參考我的簡書 這么多開源框架,該用哪個好?

最后編輯于
?著作權(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)容

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