URLConnection 或 HTTPClient:哪个提供更好的功能和更高的效率?

Posted

技术标签:

【中文标题】URLConnection 或 HTTPClient:哪个提供更好的功能和更高的效率?【英文标题】:URLConnection or HTTPClient: Which offers better functionality and more efficiency? 【发布时间】:2012-03-04 00:09:10 【问题描述】:

我希望为 android 应用程序创建一个登录表单。我想使用 post 方法将信息发送到由 php 文件处理的服务器端;依次验证参数并发送回响应。

我查看了使用 HttpClient 和 URLConnection 的实现,它们非常相似。在 Android 应用中使用哪个更有效?

【问题讨论】:

查看安卓官方博客here,值得一读。 ***.com/q/4799151/741249的可能重复 【参考方案1】:

我相信在这种情况下,这取决于您认为哪种 API 更自然。通常,HTTPClient 在服务器端应用程序(或者可能是批处理应用程序)中更有效,因为它允许您指定一个多线程连接池,具有最大连接数和最大每个主机连接数(确保并发连接到同一主机不会被序列化(HttpUrlConnection 有问题))。但在 Android 应用中,您可能一次只建立一个连接,所以这无关紧要。

【讨论】:

【参考方案2】:

我对此做了一些研究。

我在 Android 上使用 Apache HttpClient 已经有很长时间了。 这对我来说似乎是一个自然的选择,我认为随着时间的推移它会得到改进。

另一方面,当我为旧版BlackBerry OS 进行开发时,我一直在使用 HttpUrlConnection.

在我看来,黑莓的性能明显优于 Android。

HttpClient 是一个功能齐全但有缺陷的类,它提供了大量的 API/方法。它可用于为 Android 创建功能齐全的 Web 浏览器。但它在旧版本的 Android 上存在一些问题,并且 Google 并未积极为其做出贡献。

而 HttpUrlConnection 有一个非常有用的 API,它对开发网络客户端应用程序很有用。它在 Android 2.3 及更高版本上改进了响应缓存和改进的压缩技术。在您构建网络客户端应用程序时重新启动它。

“Apache HTTPClient 在Android 2.1 (Eclair) 和Android 2.2 (Froyo) 上的错误更少。它是这些版本的最佳选择。

对于Android 2.3(姜饼)和更好的,HttpURLConnection 是最佳选择。它的 API 简单且体积小,非常适合 Android。透明压缩和响应缓存可减少网络使用、提高速度并节省电池。新应用程序应该使用 HttpURLConnection;这是 Google 将在未来投入精力的地方。”

详情参考

Android’s HTTP Clients

【讨论】:

与这篇博文惊人地相似:android-developers.blogspot.com/2011/09/… 也许你应该引用参考文献。 能否请您告诉我们您遇到了什么样的性能差异?任何特定的,除了缓存,压缩。【参考方案3】:

根据 Android 团队的说法,您应该在 Android 2.3(Gingerbread)上使用 HttpURLConnection 或更好,因为他们将在那里进行新的开发工作。

Android’s HTTP Clients

这些天我发现了 Square 的 OkHttp,其中包括 SPDY 支持和自动重试。

【讨论】:

【参考方案4】:

我通常会推荐URLConnection,因为它可以使用 JDK 进行更新。在一个案例中,我们有一个调用使用了不支持 TLS v1.2 的旧版本 HTTP 客户端。

但是,我不会直接使用URLConnection。我通常会使用更高级别的 API,例如 JAX-RS 客户端或 wsimport 客户端来连接到另一个站点。

【讨论】:

【参考方案5】:

虽然标签是专门为 Android 设计的,但一般来说 HttpURLConnection 也是 Java EE 应用程序的更好选择,因为它将利用应用程序服务器附带的 HTTP 堆栈,其中包括在应用程序服务器级别配置 HTTPS 证书而不是代码。

它还允许您获取应用服务器堆栈提供的最新版本的 SSL,而不是被可能无法与 TLS 1.2 一起使用的旧版本 httpclient 卡住

【讨论】:

【参考方案6】:

如果您不想发送和接收大文件,我建议您使用 HttpClient。

它更容易上手和使用,互联网上还有更多可用的示例。

注意:HttpClient 不同于 HTTPClient(注意案例),后者是另一个供应商的实现。

【讨论】:

以上是关于URLConnection 或 HTTPClient:哪个提供更好的功能和更高的效率?的主要内容,如果未能解决你的问题,请参考以下文章

HttpClien Get&Post

URLConnection 或 HTTPClient:哪个提供更好的功能和更高的效率?

httpclien模拟浏览器

URLConnection-URL连接

HttpClien高并发请求连接池 - PoolingHttpClientConnectionManager

JavaSE: URL类 / URLConnection类