提及Volley
、Retrofit
、OkHttp
相信基本沒有人不知道。固然這裏把OkHttp
放進來可能有些不恰當。
由於OkHttp
的官方介紹是An HTTP+HTTP/2 client for Android and Java applications
。
也就是說OkHttp
是基於http
協議封裝的一套請求客戶端。它是真正的網絡請求部分,
與HttpClient
、HttpUrlConnection
是同樣的,
可是顯然它的效率很是高(說到這裏順便提一嘴,從android 4.4
開始HttpUrlConnection
內部默認使用的也是OkHttp
,
具體請參考以前的文章HttpUrlConnection詳解)。
而Volley
、Retrofit
是控制請求的隊列、切換、解析、緩存等邏輯。因此Volley
和Retrofit
均可以結合OkHttp
來使用。java
在Android
開發中有不少網絡請求框架,可是比較過來比較過去,最後最傾向的就是這兩個:android
Volley
:Google
發佈的網絡請求框架,專門爲移動設備定製,小而美。Retrofit
:良心企業 Square
由大神JakeWharton
主導的開源項目,是基於OkHttp
封裝的一套Resetful
網絡請求框架。Type-safe HTTP client for Android and Java by Square, Inc.
有關Volley
的介紹請看以前發佈的文章Volley源碼分析git
這裏就不分別介紹他倆了,直接說各自的優缺點:github
Retrofit
使用起來更簡單。而Volley
配置起來會稍微麻煩,由於Volley
可使用HttpClient
、HttpUrlConnection
、OkHttp
咱們須要根據本身的需求去配置。而Retrofit
只能結合OkHttp
使用。緩存
Retrofit
依賴於OkHttp
,從而會致使它的包大小會比Volley
的大。服務器
Volley
有很好的內存緩存管理,它在解析以前會將整個相應部分都加載到內存中,因此它對於小的網絡請求很是合適,可是不支持post
大數據,因此不適合上傳文件。而Retrofit
使用的是硬盤緩存,因此相比起從緩存這塊來說Retrofit
可能會更慢一些。網絡
Retrofit
依賴於OkHttp
,而OkHttp
自身會避免同時兩次請求同一個請求。因此Retrofit
一樣會和Volley
同樣去避免重複的請求,只不過它是在網絡層來處理的。app
Volley
在網絡請求部分默認依賴於Apache HttpClient
。而Apache HttpClient
從API 23
開始已經在Android
中被移除並廢棄了。這就是爲何不少開發者會認爲Volley
已通過時了,由於Volley
並無遷移到新的未廢棄的代碼。框架
默認狀況下Volley
會在DefaultRetryPolicy
中會將讀取和鏈接的超時時間設置爲2.5s
,而且對每次請求失敗或者超時都有一次自動重試。 因此對於一些服務器響應可能會超過2s
的請求,開發者須要格外的當心下。Retrofit
的默認超時時間是10s
,並且它對失敗或者超時的操做不會自動重試。oop
不少開發者都會說Retrofit
會比Volley
更快。由於有人專門去測試過,其實這裏是不嚴謹的。由於Volley
能夠結合使用HttpUrlConnection
、HttpClient
、OkHttp
等來使用,而Retrofit
是用OkHttp
一塊兒,因此若是你讓Volley
結合OkHttp
以後再來測試你就會發現整體來講其實他們不相上下。
Volley
實現了很完善的Activity
聲明週期管理。
雖然Volley
以前也有一些問題,可是它們也都被各個大神修復。
因此綜合起來講使用Volley+OKHttp
的組合是很是不錯的,既能夠保證速度又能夠知足對緩存、重試等的處理。可是若是你是RxJava
的使用者那你可能會更偏向於使用Retrofit
,由於Retrofit
能夠無縫結合RxJava
使用。目前主流的一套框架就是Retrofit + OkHttp + RxJava + Dagger2
,可是對使用者的要求也相對要高些。