[轉]volley-retrofit-okhttp之咱們該如何選擇網路框架

提及VolleyRetrofitOkHttp相信基本沒有人不知道。固然這裏把OkHttp放進來可能有些不恰當。 
由於OkHttp的官方介紹是An HTTP+HTTP/2 client for Android and Java applications。 
也就是說OkHttp是基於http協議封裝的一套請求客戶端。它是真正的網絡請求部分, 
HttpClientHttpUrlConnection是同樣的, 
可是顯然它的效率很是高(說到這裏順便提一嘴,從android 4.4開始HttpUrlConnection內部默認使用的也是OkHttp, 
具體請參考以前的文章HttpUrlConnection詳解)。 
VolleyRetrofit是控制請求的隊列、切換、解析、緩存等邏輯。因此VolleyRetrofit均可以結合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可使用HttpClientHttpUrlConnectionOkHttp咱們須要根據本身的需求去配置。而Retrofit只能結合OkHttp使用。緩存

  • Retrofit依賴於OkHttp,從而會致使它的包大小會比Volley的大。服務器

  • Volley有很好的內存緩存管理,它在解析以前會將整個相應部分都加載到內存中,因此它對於小的網絡請求很是合適,可是不支持post大數據,因此不適合上傳文件。而Retrofit使用的是硬盤緩存,因此相比起從緩存這塊來說Retrofit可能會更慢一些。網絡

  • Retrofit依賴於OkHttp,而OkHttp自身會避免同時兩次請求同一個請求。因此Retrofit一樣會和Volley同樣去避免重複的請求,只不過它是在網絡層來處理的。app

  • Volley在網絡請求部分默認依賴於Apache HttpClient。而Apache HttpClientAPI 23開始已經在Android中被移除並廢棄了。這就是爲何不少開發者會認爲Volley已通過時了,由於Volley並無遷移到新的未廢棄的代碼。框架

  • 默認狀況下Volley會在DefaultRetryPolicy中會將讀取和鏈接的超時時間設置爲2.5s,而且對每次請求失敗或者超時都有一次自動重試。 因此對於一些服務器響應可能會超過2s的請求,開發者須要格外的當心下。Retrofit的默認超時時間是10s,並且它對失敗或者超時的操做不會自動重試。oop

  • 不少開發者都會說Retrofit會比Volley更快。由於有人專門去測試過,其實這裏是不嚴謹的。由於Volley能夠結合使用HttpUrlConnectionHttpClientOkHttp等來使用,而Retrofit是用OkHttp一塊兒,因此若是你讓Volley結合OkHttp以後再來測試你就會發現整體來講其實他們不相上下。

  • Volley實現了很完善的Activity聲明週期管理。

雖然Volley以前也有一些問題,可是它們也都被各個大神修復。

因此綜合起來講使用Volley+OKHttp的組合是很是不錯的,既能夠保證速度又能夠知足對緩存、重試等的處理。可是若是你是RxJava的使用者那你可能會更偏向於使用Retrofit,由於Retrofit能夠無縫結合RxJava使用。目前主流的一套框架就是Retrofit + OkHttp + RxJava + Dagger2,可是對使用者的要求也相對要高些。

相關文章
相關標籤/搜索