HttpURLConnection和AndroidHttpClient

本文详细对比了Android中用于HTTP操作的两大方式:HttpURLConnection和AndroidHttpClient,从支持特性、压缩功能、缓存机制、性能优化及Android开发团队的推荐使用上进行了全面解析。

Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和AndroidHttpClient。

(一)HttpURLConnection

1、HttpURLConnection 是Sun公司提供的网络连接库,提供通用性、轻量级的网络连接,简单,但可扩展性强,基本的网络请求都满足,同时支持IPv6、代理、授权、Cookies等。
2、支持压缩功能,自动在请求头中加入Accept-Encoding: gzip,但在getContentLength()中获取到的是压缩后的数据长度,要获取实际长度需要读取整个流自己计算。
3、2.2之前存在连接池失效问题,如读取流失败或未完成,后面继续使用时会读取到脏数据。 可以禁用连接池功能。  
private void disableConnectionReuseIfNecessary() {    
    // 这是一个2.2版本之前的bug    
    if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {    
        System.setProperty("http.keepAlive", "false");    
    }    
}    
4、android 开发团队对 HttpURLConnectioin 比较重视,2.3版本增加 https 的改进,以及一些压缩和会话的机制。如果连接失败,它会自动去尝试重新进行连接。
5、4.0增加 http cache 功能HttpResponseCache 满足基本的 http 缓存,跟一般的 http cache 原理一样需要服务器支持。
缓存原理简单介绍:
(1)缓存利用http 头的Cache-Control,判断是否失效,未失效或无网络直接读取上次缓存,缓存一般存放于磁盘中。
(2)利用 http 头的If-Modified-Since或If-None-Match,请求数据到服务器,服务器根据If-Modified-Since或If-None-Match的值判断是否数据失效,未失效返回304状态,失效返回新的数据。
在 android 网络连接框架Volley 中自己实现了一套类似的 http cache。
6、请求时自动在 http 头加入手机信息User-Agent。

(二)AndroidHttpClient

1、AndroidHttpClient是Apache公司提供的库,封装了http的请求,参数,内容体,响应等,拥有众多API,但是因封装过多较冗余,很难扩展的同时兼容,目前已很少更新,5.1中已经被弃用。

(三)对比

1、HttpURLConnectioin支持压缩(gzip)和缓存(4.0以后),AndroidHttpClient 不支持,分别用这两 api 请求百度地址抓取数据如下


可见压缩后速度和传输数据量都减少,提升了网络请求性能。
2、android 开发团队已经弃用AndroidHttpClient,建议2.3以前使用 AndroidHttpClient,2.3(含)以后使用HttpURLConnectioin,新项目直接使用HttpURLConnectioin
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值