??HttpClient:由于HttpClient的API數(shù)量過(guò)多,使得我們很難在不破壞兼容性的情況下對(duì)它進(jìn)行升級(jí)和擴(kuò)展。
??HttpURLConnection:它是一種多用途、輕量極的HTTP客戶端,使用它來(lái)進(jìn)行HTTP操作可以適用于大多數(shù)的應(yīng)用程序。由于HttpURLConnection的API比較簡(jiǎn)單,因此可以更加容易地去使用和擴(kuò)展它。
注意:在Android 2.2版本之前,HttpURLConnection一直存在著一些bug。比如說(shuō)對(duì)一個(gè)可讀的InputStream調(diào)用close()方法時(shí),就有可能會(huì)導(dǎo)致連接池失效了。那么我們通常的解決辦法就是直接禁用掉連接池的功能:
private void disableConnectionReuseIfNecessary() {
// 處理Android SDK 2.2版本之前的bug
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
//過(guò)濾掉
}
}
??如何在Android 4.0及以后的版本中去啟用響應(yīng)緩存的功能,同時(shí)還不會(huì)影響到之前的版本的做法:
private void enableHttpResponseCache() {
try {
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
File httpCacheDir = new File(getCacheDir(), "http");
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
} catch (Exception httpResponseCacheNotAvailable) {
}
}
??在Android 2.2版本之前,選擇HttpClient更好,因?yàn)閎ug較少。但Android 2.3版本及以后,HttpURLConnection則是最佳的選擇。它的壓縮和緩存機(jī)制可以有效地減少網(wǎng)絡(luò)訪問(wèn)的流量,在提升速度和省電方面也起到了較大的作用。
參考資料:http://blog.csdn.net/hguang_zjh/article/details/33743249