HttpClient、HttpURLConnection、OKHttp和Volley

今天突然想起有必要總結一下市面上通用的一些網絡請求方式,主要通過分析其優缺點和性能,爲以後選擇網絡請求連接方式提供支持。現在常用的網絡請求方式主要有:HttpClientHttpURLConnectionOKHttpVolley

一、HttpClient:

HttpClient 是Apache的一個三方網絡框架,網絡請求做了完善的封裝,api衆多,用起來比較方便,開發快。實現比較穩定,bug比較少,但是正式由於其api衆多,是我們很難再不破壞兼容性的情況下對其進行擴展。所以,Android團隊對提升和優化httpclient積極性並不高。android5.0被廢棄,6.0逐漸刪除。

二、HttpURLConnection

HttpURLConnection是一個多用途、輕量級的http客戶端。它對網絡請求的封裝沒有HttpClient徹底,api比較簡單,用起來沒有那麼方便。但是正是由於此,使得我們能更容易的擴展和優化的HttpURLConnection。不過,再android2.2之前一直存在着一些令人煩的bug,比如一個人可讀的inputstream調用它的close方法的時候,會使得連接池實效,通常的做法就是禁用連接池。因此,在android2.2之前建議使用穩定的HttpClient,android2.2之後使用更容易擴展和優化的HttpURLConnection

三、okhttp

  • 支持Android 2.3及其以上版本;
  • 支持Java JDK 1.7以上版本;

okhttp是專注於提升網絡連接效率的http客戶端。

  1. 它能實現同一ip和端口的請求重用一個socket,這種方式能大大降低網絡連接的時間,和每次請求都建立socket,再斷開socket的方式相比,降低了服務器服務器的壓力。
  2. okhttp 對httphttps都有良好的支持。
  3. okhttp 不用擔心android版本變換的困擾。
  4. 成熟的網絡請求解決方案,比HttpURLConnection更好用。
  5. 缺點,okhttp請求網絡切換回來是在線程裏面的,不是在主線程,不能直接刷新UI,需要我們手動處理。封裝比較麻煩。

四、Volley

Volleygoogle2013 io大會上推出的網絡通信框架,特別適合處理數據量小,通信頻繁的網絡操作。優點是內部封裝了異步線程,可直接在主線程請求網絡,並處理返回的結果。同時可以取消請求,容易擴展。缺點是:面對大數據量的請求,比如下載表現糟糕,不支持httpsVolley的底層在針對android2.3以下系統使用httpclicent,在android2.3以上採用HttpUrlConnection請求網絡。

本公司的選擇:
公司使用Volley框架來處理網絡請求,但是,當數據量需求越來大的時候,Volley在面對大數據量的網絡請求的表現並不好,加上公司大量採用https協議。於是,公司網絡請求採用了Volleyokhttp。正如我們採用這種方式的優勢有:

  1. okhttp 不用擔心android版本變換的困擾。
  2. okhttp 對大數據量的網絡請求支持非常好。
  3. okhttp 同時支持httphttps
  4. okhttp 重用socket連接,網絡請求效率非常高。
  5. Volley框架在異步請求的封裝非常好,對子線程網絡請求,主線程更新UI支持非常好。能像Image-Loader一樣輕鬆加載網絡圖片。
    總之,網絡請求底層採用okhttp,異步回調使用Volley框架。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章