1.、两种请求方式对比


Android Http请求API主要分两种:


第一种是Java的HttpURLConnection,默认带gzip压缩;
第二种Apache的HttpClient,默认不带gzip压缩;
两种方式请求connection都是keep alive。

2、哪一种才是最好的?

在 Froyo(2.2) 之前,HttpURLConnection 有个重大 Bug,调用 close() 函数会影响连接池,导致连接复用失效,所以在 Froyo 之前使用 HttpURLConnection 需要关闭 keepAlive。

另外在 Gingerbread(2.3) HttpURLConnection 默认开启了 gzip 压缩,提高了 HTTPS 的性能,Ice Cream Sandwich(4.0) HttpURLConnection 支持了请求结果缓存
再加上 HttpURLConnection 本身 API 相对简单,所以对 Android 来说,在 2.3 之后建议使用 HttpURLConnection,之前建议使用 AndroidHttpClient。

Retrofit及Volley框架默认在Android Gingerbread(API 9)及以上都是用HttpURLConnection,9以下用HttpClient。

3、GZIP

在Android 2.3版本的时候,我们加入了更加透明化的响应压缩。HttpURLConnection会自动在每个发出的请求中加入如下消息头,并处理相应的返回结果:

Accept-Encoding: gzip


配置你的Web服务器来支持对客户端的响应进行压缩的功能,从而可以在这一改进上获取到最大的好处。如果在压缩响应的时候出现了问题,这篇文档会告诉你如何禁用掉这个功能。

但是如果启动了响应压缩的功能,HTTP响应头里的Content-Length就会代表着压缩后的长度,这时再使用getContentLength()方法来取出解压后的数据就是错误的了。正确的做法应该是一直调用InputStream.read()方法来读取响应数据,一直到出现-1为止。

参考:

Android访问网络,使用HttpURLConnection还是HttpClient? - 郭霖的专栏 - 博客频道 - CSDN.NET
http://blog.csdn.net/guolin_blog/article/details/12452307

Android HttpURLConnection及HttpClient选择
http://www.trinea.cn/android/android-http-api-compare/

更多相关文章

  1. android 应用的网络请求工具
  2. android-async-http使用
  3. android应用开发:android网络通信
  4. 安卓第七天笔记--网络编程一
  5. android 版本号适配 9.0网络请求方法
  6. Android网络之HttpUrlConnection和Socket关系解析
  7. OkHttp3简单使用和封装使用
  8. Android(安卓)通过API获取数据库中的图片文件方式
  9. Android网络框架-OkHttp使用

随机推荐

  1. Android异步处理系列文章
  2. Android(安卓)开发中 Parcel存储类型和数
  3. Android图形选择 - Selector
  4. android的binder机制
  5. 【Android】Android(安卓)监听apk安装替
  6. Android底层开发之旅—蓝牙系统分析
  7. 深刻解析 Android(安卓)的 AIDL 界面(1)
  8. Android(安卓)APK反编译详解(附图)
  9. Android界面设计更easy
  10. Android各种访问权限Permission详解