关于HttpUrlConnection与HttpClient的选择
来源:互联网 发布:linux修改启动画面 编辑:程序博客网 时间:2024/06/03 17:46
安卓和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也是要略快一点的。
谷歌自己也是推荐用HttpUrlConnection,对它进行了大量的优化,这个从安卓的帮助文档可以看出来:
http://developer.android.com/reference/java/net/HttpURLConnection.html
安卓开发博客上也强调,2.2以后的安卓都应该用HttpUrlConnection(这个需要翻墙):
http://android-developers.blogspot.com/2011/09/androids-http-clients.html
总之,在安卓开发上,虽然HttpClient更好地支持很多细节的控制(如代理、COOKIE、鉴权、压缩、连接池),但相应地对开发人员要求更高,代码写起来更复杂,普通开发人员很难做到对它很好地驾驭,官方的支持也越来越少;而HttpUrlConnection对大部分工作进行了包装,屏蔽了不需要的细节,更适合开发人员直接调用,而且官方对它的支持和优化也会越来越好。我们既然是做安卓应用的开发,自然要遵循安卓官方的指引,选用HttpUrlConnection。
- 关于HttpUrlConnection与HttpClient的选择
- HttpURLConnection与HttpClient的不同
- httpurlconnection与httpclient的使用
- HTTPClient与HttpURLConnection的区别
- HttpClient 和 HttpURLConnection的使用选择
- HttpUrlConnection与HttpClient的认识(一)-HttpUrlConnection的使用
- HttpUrlConnection与HttpClient的认识(一)-HttpUrlConnection的使用
- HttpClient与HttpURLConnection的请求方式
- HttpClient与HttpURLConnection的请求方式
- HttpUrlConnection与HttpClient的区别 无代码
- 网络请求HttpURLConnection与HttpClient的使用
- HttpClient与HttpURLConnection的提交数据
- HttpUrlConnection与HttpClient的认识(三)-HttpClient的使用
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- HttpUrlConnection与HttpClient的认识(三)-HttpClient的使用
- HttpUrlConnection与HttpClient的认识(四) -HttpClient的封装
- (转)选择HttpURLConnection还是HttpClient
- Android--HttpURLConnection及HttpClient选择
- Mysql也有merge功能
- LeetCode之旅(2)
- 用Sqlite数据库来对Android页面的数据进行增删改查
- @Control详解--Spring2.5
- 各种最短路和路径输出
- 关于HttpUrlConnection与HttpClient的选择
- <项目一>mysql中为查询出的数据添加自增序列号
- LeetCode: Set Matrix Zeroes
- Android Bitmap详细介绍
- hdu4971 流-最大权闭包
- fzoj 1559 Count Zeros(数学:推理)
- JavaScript特效制作经典精讲(案例入门详解、可直接粘贴拷贝运行、史上最牛案例)
- Bottle实例2——Request Routing
- PHP访问WebService