翻译自http://blog.publicobject.com/
大多数有网络连接的Android应用会使用HTTP协议发送和接收数据。Android包含两种Http客户端类, HttpURLConnection和Apache HttpClient。这两者都支持HTTPS,streaming 上传与下载,配置超时时间,IPv6, 以及连接池。
Apache Http Client
DefaultHttpClient 和它的兄弟类AndroidHttpClient是适用于web浏览器的可扩展的Http客户端。它们有大量的灵活的API,实现比较稳定,很少有bug。但是, 其庞大的API使我们很难去改进而不破坏其兼容性。 Android团队现在已不活跃与Apache HttpClient的工作上了。
HttpURLConnection
HttpURLConnection是一个可以适用于各类应用的通用轻量级的Http客户端。该类开始较为简陋,但其关注的API让我们容易平稳地改进它。 在Froyo(2.2)之前,HttpURLConnection有一些令人沮丧的的bug。尤其是在一个可读的InputStream上调用close()将会阻碍连接池。为了解决这个bug只能关掉连接池。
private void disableConnectionReuseIfNecessary() {
// HTTP connection reuse which was buggy pre-froyo
if (Integer.parseInt(Build.VERSION.SDK) <
Build.VERSION_CODES.FROYO) {
System.setProperty("http.keepAlive", "false");
}
}
在Gingerbread(2.3),我们增加了透明的回应(response)压缩。HttpURLConnection将自动地将“Accept-Encoding: gzip”头字段添加到请求(request)中,并处理相应的回应。 通过更改你的Web服务器配置,实现对支持的客户端返回压缩后的数据。如果压缩出了问题, 类文档将提供关掉它的方法。
由于HTTP的Content-Length头字段返回的是压缩后的大小,使用getContentLength()去分配解压缩后数据buffer 的大小就是错误的。 应该从response中读字节直到InputStream.read()返回值为-1。
我们还在Gingerbread上对HTTPS作出了一些改进。HttpsURLConnection尝试以Server Name Indication(SNI)连接, SNI允许多个HTTPS host共享同一个IP地址。HttpsURLConnection也同样可以使用压缩和session ticket特性。,一旦连接失败,它会自动不去使用这些特性重试。这使得HttpsURLConnection可以有效地连接最新的服务器,同时不破坏对老旧服务器的兼容性。
在Ice Cream Sandwich(4.0),我们增加了response cache。安装了cache后,HTTP 请求以以下三种方式之一处理:
· 完全的cache的response将直接从本地存储中获取。因为不需要网络连接,此类response可以立即得到。
· 有条件cache的response必须在Web服务器验证一下cache的有效性。客户端发送一个请求,比如“如果/foo.png从昨天起有变化则给我新的图片” , 服务端的response要么是更新后的内容,要么是304 没有修改状态码。如果内容是没有改变的,就不需要下载了。
· 没有cache的response将从服务器上获取。得到这些response之后会存储到cache以便将来使用。
使用反射机制来使用Https response cache功能。以下示例代码将会在Ice Cream Sandwich上打开response cache功能而不影响到之前的版本:
private void enableHttpResponseCache() {
try {
long httpCacheSize = 10 * 1024 * 1024; // 10 MiB
File httpCacheDir = new File(getCacheDir(), "http");
Class.forName("android.net.http.HttpResponseCache")
.getMethod("install", File.class, long.class)
.invoke(null, httpCacheDir, httpCacheSize);
} catch (Exception httpResponseCacheNotAvailable) {
}
}
当然,你也需要更改你的Web服务器配置,在其Http response中设置cache头字段。
哪一种http客户端最好?
Apache HTTP client在Eclair(2.1)和Froyo(2.2)上bug更少,在这些系统版本上将是最佳选择。
从Gingerbread(2.3)起,HttpURLConnection将是最佳选择,其API简单,小巧,非常适合于Android。透明的压缩及response cache减少了网络流量,改进了网络速度,也就更省电。 新的应用将应该使用HttpURLConnection, 这是我们以后花费精力去探索的地方。
分享到:
相关推荐
在UI设计原则部分,可能会探讨Material Design,这是Google推荐的Android设计规范,包括色彩、布局、图标等元素的使用,以及响应式设计,确保应用在不同设备上都有良好的显示效果。 数据存储方面,可能涉及SQLite...
这是一个有关于Android开发平台的论文译文
基于Android的教育与教学系统的发展与评价(Development and Evaluation of Educational AndroidApplication)
这篇论文旨在分析电子邮件客户端的工作原理、功能特性,以及在信息技术环境中如何优化其性能和用户体验。 电子邮件作为互联网通信的核心部分,其客户端软件是用户与邮件服务器交互的桥梁。论文可能首先介绍了电子...
此为android官网的译文http://krelve.com/android/10.html
Android-A Programmer's Guide(译)
基于android数独游戏设计-翻译(译文).doc
外研版八年级上册英语课文译文
综上所述,基于Android的数独游戏设计不仅涉及编程语言和软件工程,还包括对移动设备特性和操作系统的深刻理解。开发者需要结合用户需求、硬件限制和Android平台特性,来创建一个功能完整、用户体验良好的数独游戏...
google android揭秘(Unlocking Android的中文翻译版)
4. **Activity与Intent**:Android应用的核心组件Activity管理和Intent的使用,Intent用于在不同组件间传递消息,是Android系统实现组件间通信的关键。 5. **BroadcastReceiver**:介绍了BroadcastReceiver的使用,...
解析JSON并提取翻译结果后,将译文显示在Android应用的界面上即可。你可能需要创建一个TextView或者EditText控件来展示原文和译文,使用TextView的setText()方法更新内容。 为了提高用户体验,还可以添加一些额外的...
API文档(Reference)是Android开发的基础,三年来(2007-2010)官方仍未出中文版的API,Android中文翻译组聚一批从事Android...发表的译文从一篇到八十多篇不断增多,为的只是多一份Android中文资料,欢迎更多朋友的加入
计算机类专业毕业设计外文翻译的原文及译文。已经排版,下载即用。
用WinAlign将译文批量导入记忆库的操作方法。
The Busy Coder's Guide to Android Development Android开发经典图书, 最新版8.1 epub格式,pdf太大了
Android安全的了解--外文原文及译文(可编辑)
比如,标签<p></p>之间的文字就会成为一个段落,在这个段落中可以使用标签<h1></h1>来定义最主要的页面标题。注意大多数开始标签,都会有相应的以开头的结束标签。 .............................. ..................
译文中可能包含了Hadoop的安装配置、API使用以及实际案例分析等内容。 2. **Spark**:Spark是新一代的大数据处理引擎,以其高效的内存计算和易用的API而著名。译文可能涵盖Spark的核心组件如Spark Core、Spark SQL...
此压缩包文件名为“智囊全集 原文和译文都完整!.rar”,表明其中包含的文本既包括原文,也提供了译文,方便读者理解。解压后的主要文件为“智囊全集 原文和译文都完整!.txt”,这预示着我们可以在此文本中深入探究...