HttpClient:由于HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展。
HttpURLConnection:它是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。由于HttpURLConnection的API比较简单,因此可以更加容易地去使用和扩展它。
注意:在Android 2.2版本之前,HttpURLConnection一直存在着一些bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:
private void disableConnectionReuseIfNecessary() {
// 处理Android SDK 2.2版本之前的bug
if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {
//过滤掉
}
}
如何在Android 4.0及以后的版本中去启用响应缓存的功能,同时还不会影响到之前的版本的做法:
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更好,因为bug较少。但Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。
参考资料:http://blog.csdn.net/hguang_zjh/article/details/33743249
网友评论