關於安卓HTTP請求用HttpUrlConnection還是HttpClient好

安卓和JAVA應用開發少不了要提交HTTP請求,而基本上目前有兩個實現方式:HttpUrlConnection(即URL.openConnection)和HttpClient。

網上不少人都認爲HttpClient更好,理由是功能更強,BUG更少,更容易控制細節。但我個人認爲普通JAVA人員可選用HttpClient,安卓開發人員則應該使用HttpUrlConnection,理由如下:

1.HttpClient是apache的開源實現,而HttpUrlConnection是安卓標準實現,安卓SDK雖然集成了HttpClient,但官方支持的卻是HttpUrlConnection;

2.HttpUrlConnection直接支持GZIP壓縮;HttpClient也支持,但要自己寫代碼處理;我們之前測試HttpUrlConnection的GZIP壓縮在傳大文件分包trunk時有問題,只適合小文件,不過這個BUG後來官方說已經修復了;

3.HttpUrlConnection直接支持系統級連接池,即打開的連接不會直接關閉,在一段時間內所有程序可共用;HttpClient當然也能做到,但畢竟不如官方直接系統底層支持好;

4.HttpUrlConnection直接在系統層面做了緩存策略處理,加快重複請求的速度。

一年多前我在開始搞安卓開發時,就自己寫了一個小程序,測試HttpUrlConnection和HttpClient兩種連接方式的連接讀取速度,分別訪問百度和CSDN的首頁。選擇這兩網站因爲一個是較少數據,另一個是較大數據。當前用的是i9000手機,安卓2.2的系統,移動EDGE網絡,APN爲CMNET,程序啓動一個服務每隔半分鐘執行一次測試,包括連接速度和讀取速度,然後將日誌以CSV格式保存分析,結果非常意外,HttpUrlConnection讀取CSDN比HttpClient快了幾倍,具體數字已經不記得了。當然了,現在網絡系統環境都不一樣了,本想現在再拿來跑一下,不過時代久遠,這個程序已經沒了;剛纔在硬盤上找了一下,程序和代碼沒找着,只好算了。後來分析,本來兩者相差不應該有這麼大,估計是GZIP壓縮的功勞,但連接速度上HttpUrlConnection也是要略快一點的。

谷歌自己也是推薦用HttpUrlConnection,對它進行了大量的優化,這個從安卓的幫助文檔可以看出來:

http://developer.android.com/reference/java/net/HttpURLConnection.html

安卓開發博客上也強調,2.2以後的安卓都應該用HttpUrlConnection(這個需要翻牆):

http://android-developers.blogspot.com/2011/09/androids-http-clients.html

總之,在安卓開發上,雖然HttpClient更好地支持很多細節的控制(如代理、COOKIE、鑑權、壓縮、連接池),但相應地對開發人員要求更高,代碼寫起來更復雜,普通開發人員很難做到對它很好地駕馭,官方的支持也越來越少;而HttpUrlConnection對大部分工作進行了包裝,屏蔽了不需要的細節,更適合開發人員直接調用,而且官方對它的支持和優化也會越來越好。我們既然是做安卓應用的開發,自然要遵循安卓官方的指引,選用HttpUrlConnection。

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章