聲明:私用,技術交流使用,大部分摘抄
HttpURLConnection:
HttpURLConnection是java的標準類,什么都沒封裝,用起來太原始,不方便,比如重訪問的自定義,以及一些高級功能等。
HttpClient:
在Android中,androidSDK中集成了Apache的HttpClient模塊,HttpClient就是一個增強版的HttpURLConnection,它只是關注于如何發(fā)送請求、接收響應,以及管理HTTP連接。如果做好封裝或者使用android-async-http,Afinal,Xutils也能挺簡單的完成http請求,但是Android6.0谷歌因為和Apache更新難以同步等原因吧已經放棄了HttpClient,HttpClient是不是系統自帶的了,不過它在最近的更新中將HttpClient的所有代碼copy了一份進來,所以還能使用。
AsyncHttpClient:
android-async-http內部實現是基于HttpClient, 我想可能也是因為目前 HttpClient 已經被廢棄所以作者放棄維護了。
Volley:
是谷歌官方13年I/O大會推出的,volley在設計的時候是將具體的請求客戶端做了下封裝:HurlStack,也就是說可以支持HttpUrlConnection, HttpClient, OkHttp,我理解的就是說它是在應用層,做了封裝,使用起來比較方便,直接用,還可以擴展HttpUrlConnection, HttpClient, OkHttp。相當于模版模式。這樣解耦還是非常方便的,可以隨意切換。
而且 Volley 里面也封裝了 ImageLoader ,所以如果圖片處理需求簡單我們可以不需要專門再去使用圖片加載框架。
而且Volley 也有缺陷,比如不支持 post 大數據,所以不適合上傳文件。不過 Volley 設計的初衷本身也就是為頻繁的、數據量小的網絡請求而生!
okHttp:
OkHttp 是 Square 公司開源的針對 Java 和 Android 程序,封裝的一個高性能 http 請求庫。
我們來先說一個常識性的錯誤:volley, retrofit, android-async-http 幫你封裝了具體的請求,線程切換以及數據轉換。而OkHttp 是基于http協議封裝的一套請求客戶端,雖然它也可以開線程,但根本上它更偏向真正的請求,跟HttpClient, HttpUrlConnection的職責是一樣的。
OKHttp 類似于 HttpUrlConnection, 是基于傳輸層實現應用層協議的網絡框架。 而不止是一個 Http 請求應用的庫。
- ok的優(yōu)勢:
鏈接復用
Response 緩存和 Cookie
默認 GZIP
請求失敗自動重連
DNS 擴展
Http2/SPDY/WebSocket 協議支持
默認情況下,OKHttp會自動處理常見的網絡問題:像二次連接、SSL的握手問題。
從Android4.4開始HttpURLConnection的底層實現采用的是okHttp.
需要注意的是:okHttp的回調方法,并不處于UI 線程中,對網絡請求結果如果涉及UI 線程的操作,需要使用Handler??梢园阉斫獬墒且粋€封裝之后的類似 HttpUrlConnection 的一個東西,但是你在使用的時候仍然需要自己再做一層封裝,這樣才能像使用一個框架一樣更加順手。
Retrofit:
Retrofit 是 Square 公司出品的默認基于 OkHttp 封裝的一套 RESTful 網絡請求框架,,RESTful 可以說是目前流行的一套 api 設計的風格,并不是標準。Retrofit 的封裝可以說是很強大,里面涉及到一堆的設計模式,你可以通過注解直接配置請求,你可以使用不同的 http 客戶端,雖然默認是用 OKhttp ,可以使用不同 Json Converter 來序列化數據,同時提供對 RxJava 的支持,使用 Retrofit + OkHttp + RxJava + Dagger2 可以說是目前比較潮的一套框架,但是需要有比較高的門檻。
OK VS Volley
毫無疑問 Volley 的優(yōu)勢在于封裝的更好,而使用 OkHttp 你需要有足夠的能力再進行一次封裝。而 OkHttp 的優(yōu)勢在于性能更高,因為 OkHttp 基于 NIO 和 Okio ,所以性能上要比 Volley更快。
IO和NIO區(qū)別,NIO 要比 IO 的性能要好,阻塞方面(IO阻塞),NIO面向緩沖區(qū),需要時可在緩沖區(qū)中前后移動。這就增加了處理過程中的靈活性。而 Okio 是 Square 公司基于 IO 和 NIO 基礎上做的一個更簡單、高效處理數據流的一個庫。
OkHttp VS Retrofit :
毫無疑問,Retrofit 默認是基于 OkHttp 而做的封裝,這點來說沒有可比性,肯定首選 Retrofit。retrofit,結合okhttp以及gson,再加上Rxjava,簡直神器!但是實際到后臺數據風格(RESTful)我覺得,這是我們下一次改進的方向。
Volley VS Retrofit:
這兩個庫都做了非常不錯的封裝,但是 Retrofit 解耦的更徹底,尤其 Retrofit 2.0 出來,Jake 對之前 1.0 設計不合理的地方做了大量重構,職責更細分,而且 Retrofit 默認使用 OkHttp ,性能上也要比 Volley 占優(yōu)勢,再有如果你的項目如果采用了 RxJava ,那更該使用 Retrofit 。
所以總結下來:
Retrofit > Volley+OK > OK ,
Retrofit > 封裝OK > Volley。