聲明:私用,技術(shù)交流使用,大部分摘抄
HttpURLConnection:
HttpURLConnection是java的標(biāo)準(zhǔn)類矛市,什么都沒封裝,用起來太原始诲祸,不方便尘盼,比如重訪問的自定義,以及一些高級功能等烦绳。
HttpClient:
在Android中,androidSDK中集成了Apache的HttpClient模塊配紫,HttpClient就是一個增強(qiáng)版的HttpURLConnection径密,它只是關(guān)注于如何發(fā)送請求、接收響應(yīng)躺孝,以及管理HTTP連接享扔。如果做好封裝或者使用android-async-http底桂,Afinal,Xutils也能挺簡單的完成http請求惧眠,但是Android6.0谷歌因為和Apache更新難以同步等原因吧已經(jīng)放棄了HttpClient籽懦,HttpClient是不是系統(tǒng)自帶的了,不過它在最近的更新中將HttpClient的所有代碼copy了一份進(jìn)來氛魁,所以還能使用暮顺。
AsyncHttpClient:
android-async-http內(nèi)部實現(xiàn)是基于HttpClient, 我想可能也是因為目前 HttpClient 已經(jīng)被廢棄所以作者放棄維護(hù)了。
Volley:
是谷歌官方13年I/O大會推出的秀存,volley在設(shè)計的時候是將具體的請求客戶端做了下封裝:HurlStack捶码,也就是說可以支持HttpUrlConnection, HttpClient, OkHttp,我理解的就是說它是在應(yīng)用層或链,做了封裝惫恼,使用起來比較方便,直接用澳盐,還可以擴(kuò)展HttpUrlConnection, HttpClient, OkHttp祈纯。相當(dāng)于模版模式。這樣解耦還是非常方便的叼耙,可以隨意切換腕窥。
而且 Volley 里面也封裝了 ImageLoader ,所以如果圖片處理需求簡單我們可以不需要專門再去使用圖片加載框架旬蟋。
而且Volley 也有缺陷油昂,比如不支持 post 大數(shù)據(jù),所以不適合上傳文件倾贰。不過 Volley 設(shè)計的初衷本身也就是為頻繁的冕碟、數(shù)據(jù)量小的網(wǎng)絡(luò)請求而生!
okHttp:
OkHttp 是 Square 公司開源的針對 Java 和 Android 程序匆浙,封裝的一個高性能 http 請求庫安寺。
我們來先說一個常識性的錯誤:volley, retrofit, android-async-http 幫你封裝了具體的請求,線程切換以及數(shù)據(jù)轉(zhuǎn)換首尼。而OkHttp 是基于http協(xié)議封裝的一套請求客戶端挑庶,雖然它也可以開線程,但根本上它更偏向真正的請求软能,跟HttpClient, HttpUrlConnection的職責(zé)是一樣的迎捺。
OKHttp 類似于 HttpUrlConnection, 是基于傳輸層實現(xiàn)應(yīng)用層協(xié)議的網(wǎng)絡(luò)框架查排。 而不止是一個 Http 請求應(yīng)用的庫凳枝。
- ok的優(yōu)勢:
鏈接復(fù)用
Response 緩存和 Cookie
默認(rèn) GZIP
請求失敗自動重連
DNS 擴(kuò)展
Http2/SPDY/WebSocket 協(xié)議支持
默認(rèn)情況下,OKHttp會自動處理常見的網(wǎng)絡(luò)問題:像二次連接、SSL的握手問題岖瑰。
從Android4.4開始HttpURLConnection的底層實現(xiàn)采用的是okHttp.
需要注意的是:okHttp的回調(diào)方法叛买,并不處于UI 線程中,對網(wǎng)絡(luò)請求結(jié)果如果涉及UI 線程的操作蹋订,需要使用Handler率挣。可以把它理解成是一個封裝之后的類似 HttpUrlConnection 的一個東西露戒,但是你在使用的時候仍然需要自己再做一層封裝椒功,這樣才能像使用一個框架一樣更加順手。
Retrofit:
Retrofit 是 Square 公司出品的默認(rèn)基于 OkHttp 封裝的一套 RESTful 網(wǎng)絡(luò)請求框架玫锋,蛾茉,RESTful 可以說是目前流行的一套 api 設(shè)計的風(fēng)格,并不是標(biāo)準(zhǔn)撩鹿。Retrofit 的封裝可以說是很強(qiáng)大谦炬,里面涉及到一堆的設(shè)計模式,你可以通過注解直接配置請求节沦,你可以使用不同的 http 客戶端键思,雖然默認(rèn)是用 OKhttp ,可以使用不同 Json Converter 來序列化數(shù)據(jù)甫贯,同時提供對 RxJava 的支持吼鳞,使用 Retrofit + OkHttp + RxJava + Dagger2 可以說是目前比較潮的一套框架,但是需要有比較高的門檻叫搁。
OK VS Volley
毫無疑問 Volley 的優(yōu)勢在于封裝的更好赔桌,而使用 OkHttp 你需要有足夠的能力再進(jìn)行一次封裝。而 OkHttp 的優(yōu)勢在于性能更高渴逻,因為 OkHttp 基于 NIO 和 Okio 疾党,所以性能上要比 Volley更快。
IO和NIO區(qū)別惨奕,NIO 要比 IO 的性能要好雪位,阻塞方面(IO阻塞),NIO面向緩沖區(qū)梨撞,需要時可在緩沖區(qū)中前后移動雹洗。這就增加了處理過程中的靈活性。而 Okio 是 Square 公司基于 IO 和 NIO 基礎(chǔ)上做的一個更簡單卧波、高效處理數(shù)據(jù)流的一個庫时肿。
OkHttp VS Retrofit :
毫無疑問,Retrofit 默認(rèn)是基于 OkHttp 而做的封裝港粱,這點來說沒有可比性嗜侮,肯定首選 Retrofit。retrofit,結(jié)合okhttp以及gson锈颗,再加上Rxjava,簡直神器咪惠!但是實際到后臺數(shù)據(jù)風(fēng)格(RESTful)我覺得击吱,這是我們下一次改進(jìn)的方向。
Volley VS Retrofit:
這兩個庫都做了非常不錯的封裝遥昧,但是 Retrofit 解耦的更徹底覆醇,尤其 Retrofit 2.0 出來,Jake 對之前 1.0 設(shè)計不合理的地方做了大量重構(gòu)炭臭,職責(zé)更細(xì)分永脓,而且 Retrofit 默認(rèn)使用 OkHttp ,性能上也要比 Volley 占優(yōu)勢鞋仍,再有如果你的項目如果采用了 RxJava 常摧,那更該使用 Retrofit 。
所以總結(jié)下來:
Retrofit > Volley+OK > OK ,
Retrofit > 封裝OK > Volley威创。