1. 程式人生 > >Android網路框架的選擇

Android網路框架的選擇

今年已經收是2018年了,Android P 預覽版已經推出來了。這裡只是想說明一下技術的更新太快了。
下面說正題,目前我們在Android中可選擇的網路框架主要有以下幾種:

  1. Volley
  2. OKhttp
  3. Retrofit

這三種,但是要說明一下:
首先,Retrofit是基於OkHttp封裝的一套 RESTful網路請求框架,底層預設採用的OKhttp,所以網路請求框架就剩下兩個了,下面就來說說這兩個。

1.Volley
Volley 是 Google 官方出的一套小而巧的非同步請求庫,該框架封裝的擴充套件性很強,支援 HttpClient、HttpUrlConnection,甚至支援 OkHttp。在Android6.0以上的機型中不再支援HttpClient。
Volley 在Android2.3以下機型使用的是HttpClient,在Android2.3及以上預設使用HttpUrlConnection。也就是說Volley 是在HttpUrlConnection的基礎上進行的封裝,這點與OKhttp不同,一會會說到。

問題1:它有什麼優勢?
答:基於網路佇列,適合小資料頻繁通訊。Volley的網路請求執行緒池預設大小為4。意味著可以併發進行4個請求,大於4個,會排在佇列中。

問題2:為什麼Volley只適合資料量小,併發高的請求?為什麼volley不適合post大量資料,以及為什麼不適合上傳下載大量檔案?
答:Volley在內部實現上採用了ByteArrayPool進行記憶體中的資料儲存,ByteArrayPool只是一個小於4k的內村快取池,當儲存的時候優是從ByteArrayPool中取出一塊已經分配的記憶體區域, 不必每次存資料都要進行記憶體分配,而是先查詢緩衝池中有無適合的記憶體區域,如果有,直接拿來用,從而減少記憶體分配的次數 。但是這塊記憶體的大小有限制,所以當進行上傳或者下載大量資料的時候這塊記憶體容易溢位,造成OOM。

問題3:那它怎麼操作大檔案?
答:通過配置,它是可以完成大檔案操作的,方法請自行百度。

  1. OKhttp
    這個框架比較火,估計做Android開發的都知道,OKhttp是高效能的http庫,支援同步、非同步,而且實現了spdy、http2、websocket協議,api很簡潔易用,和Volley一樣實現了http協議的快取。
    它與Volley的區別之一是Volley底層使用HttpUrlConnection,而OKhttp則重新實現了http協議,並又有底層依賴。
    它的優勢一大堆,目前Android原始碼底層已經用OKhttp代替了HttpUrlConnection可見OKhttp還是十分強大的,基本教程網上已經很多了,我就不再寫了,說說我的選擇吧。
    如果軟體自身請求比較多,並且不涉及到大檔案,優先選用Volley,畢竟它效率還不錯,開發相對簡單,程式碼本身體積也比較小。當軟體網路請求比較複雜,資料量也比較大的時候選用OKhttp吧。

當然目前大多說App會使用Retrofit,所以自然就使用了OKhttp。