Android中大多数应用都会发送和接受HTTP请求,在Android API中主要由两个HTTP请求的相关类,一个是HttpURLConnection,另一个是Apache HTTP Client。这两个类实现的HTTP请求都支持HTTPS协议,基于流的上传和下载,可配置超时时间,IPv6和连接池。
Apache HTTP Client
DefaultHttpClient和同类的AndroidHttpClient都是可扩展的类。它们有大量且灵活的API,适用于网页浏览器开发。同时它们比较稳定并且bug较少。但是繁多的API的现实下,对其改善与保持兼容性不可得兼,明显Android团队的精力已然不在Apache HTTP Client。
HttpURLConnection
HttpURLConnection是一个通用,轻量的实现,可以满足大多数的程序进行HTTP请求。这个类虽然一开始比较简陋,但是其主要的几个API使得我们更容易进行稳定改善。
连接池污染
在冻酸奶(Android 2.2)之前,HttpURLConnection有着一些烦人的bug。最烦人的就是调用一个可读的InputStream的close方法会污染连接池。我们需要禁用连接池绕开这个问题,如下代码可以禁用连接池。
1 2 3 4 5 6 |
|
压缩数据与大小
从2.3开始,我们默认对返回的响应进行了压缩,HttpURLConnection会自动为发出去的请求加上Accept-Encoding: gzip
这个头信息。如果gzip压缩的响应有问题,可以通过下面代码禁用gzip。
1
|
|
由于HTTP中的Content-Length头信息返回的是压缩后的大小,所以我们不能使用getContentLength()来计算未压缩数据的大小。正确的做法应该是读取HTTP响应中的字节,直到InputStream.read()方法返回为-1.
HTTPs改进
从Gingerbread开始,增加了对HTTPs链接的优化。在进行HTTPs请求之前,HttpsURLConnection会尝试使用服务器名字指示(Server Name Indication),这种技术可以让多个HTTPs主机共享一个IP地址。在HTTPs请求中,HttpsURLConnection也支持压缩和会话标签(Session Tickets)。一旦连接失败,HttpsURLConnection会不使用上面的三个特性进行重试。这样即可以保证在连接时高效率地连接到最新的服务器,也可以在不破坏兼容性的同时连接到旧服务器。
响应缓存
从4.0开始,HttpURLConnection引入了响应缓存机制。一旦缓存创建,后续的HTTP请求会按照下面情况处理
- 完全缓存的响应会直接从本地存储中读取,响应很快,不需要网络连接。
- 有条件的缓存必须由服务端进行freshness验证,比如client发出一个请求,如”Give me /foo.png if it changed since yesterday”,然后服务器端要么返回最新的内容,要么返回304未修改的状态。如果内容不变,则不下载。
- 没有缓存的响应需要服务器处理,然后这些请求被缓存下来。
对于低于4.0的版本,我们可以使用反射开启响应的缓存机制
1 2 3 4 5 6 7 8 9 10 |
|
当然,这里还需要服务器端设置HTTP缓存相关的头信息。
哪家强
在2.3之前的版本,Apache的HTTP请求响应实现比较稳定,bug也少,所以在那些版本上它的最好。
但是在2.3之后,毫无疑问,HttpURLConnection是最好的。它API精简实用,默认支持压缩,响应缓存等。最重要的这是Android团队重点投入的,而Apache的版本已经被抛弃了。所以还是使用HttpURLConnection吧。
相关推荐
android-serialport-api Accessing serial ports for Android The current Android SDK does not provide any API for reading and writing to the Linux TTY serial ports. You may find such serial ports on ...
android SDK中添加自定义api 对应我的博客http://blog.csdn.net/a624731186 里面android SDK中添加自定义api文章
Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android API 中文文档 Android Android API 中文文档 中文文档Android API ...
Android官方中文翻译API文档 离线中文版api能打开
Android官方API文档完整中文版是一款官方推出的全中文完整API,Android API是一套可供调用的系统接口,在需要使用的时候必备一套Android官方中文API文档。 Android API中文文档基本简介 API(Application ...
android2.2完整版中文API和英文API.开发Android必备
Android2.2—TextView API中文文档
android OpenGL ES 中文 API
NULL 博文链接:https://greatwqs.iteye.com/blog/1048095
Android中文API合集(3)Android中文API合集(3)Android中文API合集(3)Android中文API合集(3)Android中文API合集(3)
Android中文API合集 chm格式文档
Android中文API.rar
网上最全的android中文API整理包
Android中文翻译组是一个非盈利性质的开源组织,聚一批开发人员、大学生、研究生等Android爱好者,利用业余时间对Android相关的API及开发者指南等进行翻译,至今已超过200人报名参与,欢迎加入,联系Mail:over140@...
包含android4.0中文API和android开发指南
android中文apiandroid中文api
API文档(Reference)是Android开发的基础,三年来(2007-2010)官方仍未出中文版的API,Android中文翻译组聚一批从事Android开发人员、论坛版主、大学生、研究生等Android爱好者,利用业余时间对Android的API进行翻译,...
android 串口通讯开发 android-serialport-api包。google的开源包。里面已经带了google发布好的so文件。
Android-API大全 Android-API大全 Android-API大全 Android-API大全