今天在知乎看到一個問題,忍不住去回答了。
也在這里寫一份:okhttp,retrofit,android-async-http,volley應該選擇哪一個?
我們來先說一個常識性的錯誤:
volley, retrofit, android-async-http 幫你封裝了具體的請求,線程切換以及數據轉換。
而OkHttp 是基于http協議封裝的一套請求客戶端,雖然它也可以開線程,但根本上它更偏向真正的請求,跟HttpClient, HttpUrlConnection的職責是一樣的。
所以不要混淆。
-----以下純個人主觀見解
首先,我想即使你單純使用OkHttp,還是會再包一層的,這樣就等價于Volley之流的框架,只是封裝的好與壞而已。
android-async-http內部實現是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系統自帶的了,不過它在最近的更新中將HttpClient的所有代碼copy了一份進來,所以還能使用。
Volley是官方出的,volley在設計的時候是將具體的請求客戶端做了下封裝:HurlStack,也就是說可以支持HttpUrlConnection, HttpClient, OkHttp,相當于模版模式吧,這樣解耦還是非常方便的,可以隨意切換,如果你之前使用過Volley,并習慣使用,那直接寫個OkHttp擴展就行了。
Retrofit因為也是square出的,所以大家可能對它更崇拜些。Retrofit的跟Volley是一個套路,但解耦的更徹底:比方說通過注解來配置請求參數,通過工廠來生成CallAdapter,Converter,你可以使用不同的請求適配器(CallAdapter), 比方說RxJava,Java8, Guava。你可以使用不同的反序列化工具(Converter),比方說json, protobuff, xml, moshi等等。
超級解耦,里面涉及到超多設計模式,個人覺得是很經典的學習案例。雖然支持Java8, Guava你可能也不需要用到。xml,protobuff等數據格式你也可能不需要解析。but,萬一遇到鬼了呢。
至于性能上,個人覺得這完全取決于請求client,也就是okhttp的性能,跟這些封裝工具沒太大關系。
至于RxJava,最好充分理解其原理之后再使用,別人云亦云,特別team人數多的情況下,總得有個完全精通的吧,萬一掉坑里了呢。。。
就說這么多啦,選最適合項目的,選大多數人選擇的,選簡單易用的,就這么個標準。
關于Retrofit源碼分析可以看我另外一些文章
Retrofit分析-漂亮的解耦套路
Retrofit分析-經典設計模式案例
沒耐心自己分析源碼的同學,還可以參考Stay錄制的視頻版
Retrofit分析-漂亮的解耦套路(視頻版)
另外怎么選擇開源library,可以參考我的簡書 這么多開源框架,該用哪個好?