概念
retrofit、android-async-http、volley,幫你封裝了具體的請求,線程切換以及數(shù)據(jù)轉(zhuǎn)換。
OkHttp 是基于http協(xié)議封裝的一套請求客戶端,雖然它也可以開線程,但根本上它更偏向真正的請求,跟HttpClient, HttpUrlConnection的職責是一樣的。
1. android-async-http
android-async-http內(nèi)部實現(xiàn)是基于HttpClient, 想必你肯定知道6.0之后HttpClient是不是系統(tǒng)自帶的了,所以這個庫已經(jīng)不適合android平臺了。
2. Volley
Volley是官方出的,volley在設(shè)計的時候是將具體的請求客戶端做了下 封裝:HurlStack,也就是說可以支持HttpUrlConnection, HttpClient, OkHttp,相當于模版模式吧,這樣解耦還是非常方便的,可以隨意切換,如果你之前使用過Volley,并習慣使用,那直接寫個OkHttp擴展就行了。
缺點:是不支持同步,這點會限制開發(fā)模式;不能post大數(shù)據(jù),所以不適合用來上傳文件。
3. Retrofit
- 基于okhttp,特點是簡化了網(wǎng)絡(luò)請求流程,清晰簡單的接口。
- 同時自己內(nèi)部對OkHtttp客戶端做了封裝,同時2.x把之前1.x版本的部分不恰當職責都轉(zhuǎn)移給OkHttp了(例如Log,目前用OkHttp的Interceptor來實現(xiàn)),這樣的好處是職責清晰,Retrofit做自己該做的事兒。
- 而且Retrofit提供不同的Json Converter實現(xiàn)(json, protobuff, xml, moshi等),同時提供RxJava支持(返回Observable對象),配合Jackson(或者Gson)和RxJava,再加上Dagger2,你的效率至少可以提高一倍
- okhttp是高性能的http庫,支持同步、異步,而且實現(xiàn)了spdy、http2、websocket協(xié)議,api很簡潔易用,和volley一樣實現(xiàn)了http協(xié)議的緩存。picasso就是利用okhttp的緩存機制實現(xiàn)其文件緩存,實現(xiàn)的很優(yōu)雅,很正確,反例就是UIL(universal image loader),自己做的文件緩存,而且不遵守http緩存機制。
4.Okhttp
內(nèi)部開啟一個Socket鏈接,所有請求共享同一個Socket,目的是為了減少鏈接時間,并且維護有一個連接池;同時對傳輸數(shù)據(jù)進行GZIP壓縮,并且對網(wǎng)絡(luò)數(shù)據(jù)有緩存機制
OKHttp源碼解析
OKHttp源碼淺析與最佳實踐

Paste_Image.png