Sunday, October 02, 2011

Android’s HTTP Clients

今天在Android Blog上看到這篇: Android's HTTP Clients
之前在寫Android app的時候在選擇http client的確有苦惱了一下,
就決定來看看這篇囉!

Android提供兩種類型的http client:
1. Apache HTTP Client: DefaultHttpClient(Since: API lv1), AndroidHttpClient(Since: API lv8)
2. HttpURLConnection

直接把文章最後的結論寫在這.
- 如果是Eclair(2.1)和Froyo(2.2)平台, 建議使用Apache HTTP Client
- 如果是Gingerbread(2.3)之後的平台, 建議使用HttpURLConnection

Apache HTTP Client家族有兩個選擇:
DefaultHttpClient(Since: API lv1)和AndroidHttpClient(Since: API lv8)
AndroidHttpClient在我寫app的時候還沒出現所以我用的就是DefaultHttpClient囉!
Apache家族的好處是穩定bug少也有各種api能提供不同的設定,
但因為整個library太大很難在改善效能的同時又不破壞向後相容性,
所以現在Android Team已經不使用囉~

HttpURLConnection相較之下就是比較lightweight的library,
但是在Froyo之前比較buggy所以讓人有些卻步(原文有較詳細的描述)不過現在已經有改善囉!
從Gingerbread開始也提供了一些新功能:
1. 能夠收gzip的檔案
2. 支援Server Name Indication
在Ice Cream Sandwich之後開始支援response cache,
- 對於fully cached的東西將會直接從本地拿
- 對於Conditionally cached的東西將會先向server送出request, 如果收到304 Not Modified的response就不需要重抓
- 對於Uncached response會直接跟server拿, 之後放在cache裡

大概就是醬囉!

Ref:
- DefaultHttpClient
- AndroidHttpClient
- HttpURLConnection

No comments:

Post a Comment