Android訪問網絡,HttpURLConnection還是HttpClient?

1.、兩種請求方式對比


Android Http請求API主要分兩種:


第一種是Java的HttpURLConnection,默認帶gzip壓縮;
第二種Apache的HttpClient,默認不帶gzip壓縮;
兩種方式請求connection都是keep alive。

 

2、哪一種纔是最好的?

在 Froyo(2.2) 之前,HttpURLConnection 有個重大 Bug,調用 close() 函數會影響連接池,導致連接複用失效,所以在 Froyo 之前使用 HttpURLConnection 需要關閉 keepAlive。

 

另外在 Gingerbread(2.3) HttpURLConnection 默認開啓了 gzip 壓縮,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了請求結果緩存
再加上 HttpURLConnection 本身 API 相對簡單,所以對 Android 來說,在 2.3 之後建議使用 HttpURLConnection,之前建議使用 AndroidHttpClient。

 

Retrofit及Volley框架默認在Android Gingerbread(API 9)及以上都是用HttpURLConnection,9以下用HttpClient。

 

3、GZIP

在Android 2.3版本的時候,我們加入了更加透明化的響應壓縮。HttpURLConnection會自動在每個發出的請求中加入如下消息頭,並處理相應的返回結果:

Accept-Encoding: gzip


配置你的Web服務器來支持對客戶端的響應進行壓縮的功能,從而可以在這一改進上獲取到最大的好處。如果在壓縮響應的時候出現了問題,這篇文檔會告訴你如何禁用掉這個功能。

但是如果啓動了響應壓縮的功能,HTTP響應頭裏的Content-Length就會代表着壓縮後的長度,這時再使用getContentLength()方法來取出解壓後的數據就是錯誤的了。正確的做法應該是一直調用InputStream.read()方法來讀取響應數據,一直到出現-1爲止。

 

參考:

Android訪問網絡,使用HttpURLConnection還是HttpClient? - 郭霖的專欄 - 博客頻道 - CSDN.NET
http://blog.csdn.net/guolin_blog/article/details/12452307

Android HttpURLConnection及HttpClient選擇
http://www.trinea.cn/android/android-http-api-compare/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章