標籤:android blog http io ar 使用 java sp 檔案
轉至 http://blog.csdn.net/huzgd/article/details/8712187
安卓和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也是要略快一點的。
Google自己也是推薦用HttpUrlConnection,對它進行了大量的最佳化,這個從安卓的協助文檔可以看出來:
http://developer.android.com/reference/java/net/HttpURLConnection.html
安卓開發部落格上也強調,2.2以後的安卓都應該用HttpUrlConnection(這個需要FQ):
http://android-developers.blogspot.com/2011/09/androids-http-clients.html
總之,在安卓開發上,雖然HttpClient更好地支援很多細節的控制(如代理、COOKIE、鑒權、壓縮、串連池),但相應地對開發人員要求更高,代碼寫起來更複雜,普通開發人員很難做到對它很好地駕馭,官方的支援也越來越少;而HttpUrlConnection對大部分工作進行了封裝,屏蔽了不需要的細節,更適合開發人員直接調用,而且官方對它的支援和最佳化也會越來越好。我們既然是做安卓應用的開發,自然要遵循安卓官方的指引,選用HttpUrlConnection。
關於安卓HTTP請求用HttpUrlConnection還是HttpClient好