HttpURLConnection和AndroidHttpClient

Android中主要提供了兩種方式來進行HTTP操作,HttpURLConnection和AndroidHttpClient。

(一)HttpURLConnection

1、HttpURLConnection 是Sun公司提供的網絡連接庫,提供通用性、輕量級的網絡連接,簡單,但可擴展性強,基本的網絡請求都滿足,同時支持IPv6、代理、授權、Cookies等。
2、支持壓縮功能,自動在請求頭中加入Accept-Encoding: gzip,但在getContentLength()中獲取到的是壓縮後的數據長度,要獲取實際長度需要讀取整個流自己計算。
3、2.2之前存在連接池失效問題,如讀取流失敗或未完成,後面繼續使用時會讀取到髒數據。可以禁用連接池功能。 
private void disableConnectionReuseIfNecessary() {    
    // 這是一個2.2版本之前的bug    
    if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {    
        System.setProperty("http.keepAlive", "false");    
    }    
}    
4、android 開發團隊對 HttpURLConnectioin 比較重視,2.3版本增加 https 的改進,以及一些壓縮和會話的機制。如果連接失敗,它會自動去嘗試重新進行連接。
5、4.0增加 http cache 功能HttpResponseCache滿足基本的 http 緩存,跟一般的 http cache 原理一樣需要服務器支持。
緩存原理簡單介紹:
(1)緩存利用http 頭的Cache-Control,判斷是否失效,未失效或無網絡直接讀取上次緩存,緩存一般存放於磁盤中。
(2)利用 http 頭的If-Modified-Since或If-None-Match,請求數據到服務器,服務器根據If-Modified-Since或If-None-Match的值判斷是否數據失效,未失效返回304狀態,失效返回新的數據。
在 android 網絡連接框架Volley 中自己實現了一套類似的 http cache。
6、請求時自動在 http 頭加入手機信息User-Agent。

(二)AndroidHttpClient

1、AndroidHttpClient是Apache公司提供的庫,封裝了http的請求,參數,內容體,響應等,擁有衆多API,但是因封裝過多較冗餘,很難擴展的同時兼容,目前已很少更新,5.1中已經被棄用。

(三)對比

1、HttpURLConnectioin支持壓縮(gzip)和緩存(4.0以後),AndroidHttpClient 不支持,分別用這兩 api 請求百度地址抓取數據如下


可見壓縮後速度和傳輸數據量都減少,提升了網絡請求性能。
2、android 開發團隊已經棄用AndroidHttpClient,建議2.3以前使用 AndroidHttpClient,2.3(含)以後使用HttpURLConnectioin,新項目直接使用HttpURLConnectioin
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章