今天在知乎看到一個問題,忍不住去回答了。
也在這里寫一份: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,可以參考我的簡書 這么多開源框架,該用哪個好?