關於安卓HTTP請求用HttpUrlConnection還是HttpClient好?使用者42701275073213072019-10-04 12:10:29

安卓和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也是要略快一點的。 總之,在安卓開發上,雖然HttpClient更好地支援很多細節的控制(如代理、COOKIE、鑑權、壓縮、連線池),但相應地對開發人員要求更高,程式碼寫起來更復雜,普通開發人員很難做到對它很好地駕馭,官方的支援也越來越少;而HttpUrlConnection對大部分工作進行了包裝,遮蔽了不需要的細節,更適合開發人員直接呼叫,而且官方對它的支援和最佳化也會越來越好。我們既然是做安卓應用的開發,自然要遵循安卓官方的指引,選用HttpUrlConnection。 轉載