转-Android联网 — HttpURLConnection和HttpClient选择哪个好?

http://www.ituring.com.cn/article/199619?utm_source=tuicool

在Android开发中,访问网络我们是选择HttpURLConnection还是HttpClient好呢?这两种网络协议又有什么区别呢?下面我们就一起来look look。

 1、HttpClient

  HttpClient拥有DefaultHttpClient和AndroidHttpClient两个具体的实现类,它们都有众多的API,而且实现比较稳定,bug数量也很少。

  但也正是因为HttpClient的API数量过多,使得我们很难在不破坏兼容性的情况下对它进行升级和扩展,所以目前Android开发团队在提升和优化HttpClient方面的工作态度并不积极。

  2、HttpURLConnection

  HttpURLConnection是一种多用途、轻量极的HTTP客户端,使用它来进行HTTP操作可以适用于大多数的应用程序。虽然HttpURLConnection的API提供的比较简单,但是同时这也使得我们可以更加容易地去使用和扩展它。

不过在Android 2.2版本之前,HttpURLConnection一直存在着一些令人厌烦的bug。比如说对一个可读的InputStream调用close()方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:

  代码:

  private void disableConnectionReuseIfNecessary() {

  // 这是一个2.2版本之前的bug

  if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {

  System.setProperty("http.keepAlive", "false");

  }
  }

  3、到底哪一种才是最好的?

 
  不同版本,最佳选择肯定有所不同,在Android 2.2版本之前,HttpClient拥有较少的bug,因此使用它是最好的选择。

   而在Android 2.3版本及以后,HttpURLConnection则是最佳的选择。它的API简单,体积较小,因而非常适用于Android项目。压缩和缓存机制可以有效地减少网络访问的流量,在提升速度和省电方面也起到了较大的作用。对于新的应用程序应该更加偏向于使用HttpURLConnection,因为在以后的工作当中我们也会将更多的时间放在优化HttpURLConnection上面。

    因此大家在开发Android应用的时候,要看自己是开发给什么Android版本的用户使用的,如果目标客户是Android 2.2版本及以下,则选用HttpClient,如果目标客户是Android 2.3版本及以上,则选择HttpURLConnection。但是现在软件更新换代这么快,相信绝大部分的Android应用目标客户群都是Android 2.3版本及以上,所以当下来说,HttpURLConnection应该是更受亲睐的选择。
时间: 2024-10-16 15:07:33

转-Android联网 — HttpURLConnection和HttpClient选择哪个好?的相关文章

HttpURLConnection及HttpClient选择(转)

介绍Android中Http请求方式的选择.区别及几个常用框架对API的选择 1. 两种请求方式对比Android Http请求API主要分两种:第一种是Java的HttpURLConnection,默认带gzip压缩第二种Apache的HttpClient,默认不带gzip压缩两种方式请求connection都是keep alive,默认User-Agent不同. 关于两种方式发出去的请求头对比图如下: 上图是通过抓包抓包的,具体如何抓包可参考:Android利用Fiddler进行网络数据抓包

[转]Android访问网络,使用HttpURLConnection还是HttpClient

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/12452307 最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行

Android访问网络,使用HttpURLConnection还是HttpClient?

最近在研究Volley框架的源码,发现它在HTTP请求的使用上比较有意思,在Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient.我也比较好奇这么使用的原因,于是专门找到了一位Google的工程师写的一篇博客,文中对HttpURLConnection和HttpClient进行了对比,下面我就给大家简要地翻译一下. 原文地址:http://android-developers.blogspot.com/20

android菜鸟学习笔记24----与服务器端交互(一)使用HttpURLConnection和HttpClient请求服务端数据

主要是基于HTTP协议与服务端进行交互. 涉及到的类和接口有:URL.HttpURLConnection.HttpClient等 URL: 使用一个String类型的url构造一个URL对象,如: URL url = new URL(http://10.0.2.2/index.php); openConnection()方法返回一个对指定url的资源的连接.返回类型是URLConnection,但是,由于这里我们一般用的是http协议,所以返回的实际是HttpURLConnection对象,故一

Android 网络编程之---HttpClient 与 HttpURLConnection 共用cookie

前言 在编程过程中总结归纳出来的一种编程经验,从而形成的设计思想称为设计模式. 设计模式有23种.它适用于所有的编程语言. 常用的有创新型的设计模式:简单工厂.抽象工厂和单例模式:行为型的设计模式:模板设计模式.观察者模式和命令模式:结构性的设计模式:适配器设计模式.代理模式(静态和动态两种,典型的有在spring的AOP编程中使用)和装饰器设计模式. 正文 单例模式(singleton) 保证一个类在内存中只能创建一个实例. 1.实现步骤: 1)将构造器私有化,即使用private修饰构造器

android中的HttpURLConnection和HttpClient实现app与pc数据交互

自学android的这几天很辛苦,但是很满足,因为每当学到一点点知识点都会觉得很开心,觉得今天是特别有意义的,可能这个就是一种莫名的热爱吧. 下面来说说今天学习的HttpURLConnection和HttpClient的区别吧,其实这2种都能进行客户端和服务器的数据交互,只是HttpClient封装的更完全. 先看下案例吧 第一种HttpURLConnection访问服务器: 客服端代码: package com.example.demo01; import java.io.IOExceptio

HttpURLConnection和HttpClient的区别

安卓中访问网络方式: Android应用程序都会使用HTTP协议来发送和接收网络数据,而Android中主要提供了两种方式来进行HTTP操作,HttpURLConnection和HttpClient.这两种方式都支持HTTPS协议.以流的形式进行上传和下载.配置超时时间.IPv6.以及连接池等功能. 1.HttpClient: 优点:DefaultHttpClient和AndroidHttpClient都是HttpClient具体的实现类,都拥有众多的API,而且实现比较稳定,bug数量也很少.

关于安卓HTTP请求用HttpUrlConnection还是HttpClient好

转至http://blog.csdn.net/huzgd/article/details/8712187 安卓和JAVA应用开发少不了要提交HTTP请求,而基本上目前有两个实现方式:HttpUrlConnection(即URL.openConnection)和HttpClient. 网上不少人都认为HttpClient更好,理由是功能更强,BUG更少,更容易控制细节.但我个人认为普通JAVA人员可选用HttpClient,安卓开发人员则应该使用HttpUrlConnection,理由如下: 1.

每日总结 - 网络请求HttpURLConnection还是HttpClient

看到谷歌官方的一段代码,Android 2.3及以上版本,使用的是HttpURLConnection,而在Android 2.2及以下版本,使用的是HttpClient. 1 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) { 2 // ...use HttpURLConnection for stack. 3 } else { 4 // ...use AndroidHttpClient for stack. 5 } 到