HttpURLConnection HttpClient

Android本身提供了两种Http网络通信工具,HttpURLConnection和HttpClient。
Google官方文档推荐在2.3以上系统使用HttpURLConnection。
1.HttpURLConnectino和HttpClient的比较
        关于HttpURLConnectino和HttpClient的比较,参考了一篇博客: http://android-developers.blogspot.com/2011/09/androids-http-clients.html
        大多数有网络连接的android app都是用HTTP协议来发送和接受数据。 Android本身提供了两种Http网络通信工具,HttpURLConnection和HttpClient。它们都支持HTTPS、流上传和下载、配置超时、IPv6和连接池。
         Apache HTTP Client
        DefaultHttpClient和AndroidHttpClient对于web浏览器来说是可扩展性良好的HTTP客户端。它们有庞大复杂的API。
        但是它庞大的API对于我们来说是很难再不破坏兼容性的情况下扩展它们。
         HttpURLConnection
        对于大多数app来说,HttpURLConnection是一个多用途的、轻量级的HTTP客户端。这个类很简单,但是它的API使得我们可以很简单的进行扩展。
        在android2.2之前,HttpURLConnection有一些bug。尤其在可一个可读的输入流中调用close()方法的时候会破坏连接池。可以让连接池失效来避免这个问题:

        在android2.3,HttpURLConnection添加了一个响应压缩。HttpURLConnection会自动的为请求添加Accept-Encoding : gzip头部,并处理具有相同头部的响应。可以重复利用这个特性,来减少网络流量的使用,关于gzip,它是一种网页的压缩格式,可以将网页进行压缩以提高网页访问速度。
        因为HTTP的Content-Length头部返回的是压缩后的大小,所以使用getContentLength()方法来获得未压缩数据的大小是错误的,应该使用InputStream.read()来读取,知道方法返回-1
         在android 4.0,HttpURLConnection添加了一个响应缓存。使用了缓存,HTTP请求将会满足如下三个方式之一:
        * 完全缓存响应是通过本地存储来提供的。
        * 部分缓存,客户端发送一个类似于“Give me /foo.png if it changed since yesterday” 的请求,服务器返回升级过的内容,或者304Not Modified 状态码。如果内容没有更改,就不会去下载。
        * 无缓存响应将会在一段时间后在响应缓存中被存储。
        使用反射机制来启动HTTP响应的缓存。下面代码会在不影响4.0之前版本的情况下开启4.0版本上的响应缓存:

         选择哪个?
        Apache HTTP Client在android2.0和2.2上有较少的bug,所以在这两个版本上是最好的选择。
        对于android2.3及以上,HttpURLConnection是最好的选择。它简单的API和较小的size使它更加适合android。压缩和响应缓存减少了网络使用量,提升了速度也节省了电量。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值