这个问题在这里已经有一个答案:

我需要在Android应用程序上下载一个网页,并且很难决定使用Android Apache HTTP客户端还是Java的URLConnection。

有什么想法吗?

有帮助吗?

解决方案

对于大多数事情,我会说 HttpClient 是要走的路。但是,在某些情况和边缘案例中,我会回到一个 URLConnection. 。边缘案例的示例 这里这里

编辑
以前提出过类似的问题: httpclient vs httpurlconnection. 我认为 HttpUrlConnectionHttpClient 建在标准Java库的顶部。然而 我会找到的 HttpClient 代码更快,更易于编写和维护。根据下面的评论, HttpClient 已经优化了性能。

如果性能是一个主要问题,那么最好的选择是写两个客户,一个使用每种方法,然后对两者进行基准测试。如果这样做,请让我们知道结果。

其他提示

Google自姜饼以来一直默默地贬低了Apache HTTP客户端的使用: http://android-developers.blogspot.com/2011/09/androids-http-clients.html. 。尽管他们没有以弃用的注释标记它,但他们建议您将httpurlconnection用于新应用程序: it is where we [Google] will be spending our energy going forward.

就我个人而言,我不喜欢这个决定,宁愿坚持使用HTTPCLIENT 4.1+,因为它更快,更少的错误并且定期更新。尽管您无法将系统库升级到4.1版,但您可以将HTTPCLIENT JAR包含在Android项目中(因为这将使您不依赖Google Bug修复程序和供应商更新)。但是,有一个陷阱:为了防止与内置库发生碰撞,您应该使用jarjar工具重命名httpclient软件包。原来有人已经这样做了(重新包装的JAR和Android Library项目可供下载):

http://code.google.com/p/httpclientandroidlib/

这是Android的HTTPCLIENT 4.1的重新包装。 Android SDK中的HTTPClient版本为4.0Beta2。自4.0beta以来,HTTPCLIENT和一些急需的错误相框等更新了。

由于Google已弃用HTTPCLIENT,而支持Java标准HTTPURLConnection,因此我创建了一个脚本,将Apache的HTTPCLCLIENT的库存发布转换为Android库。

更改股票httpclient

  • 将所有包裹org.apache.http更名为ch.boye.httpclientandroidlib
  • 删除所有依赖于org.ietf的类
  • 用android.util.base64替换org.apache.commons.codec.binary.base64
  • 创建了一个新类HTTPCLIENTANDROIDLOG来替换org.apache.commons.logging

在姜饼和后来,httpurlconnection是必经之路。考虑apache httpclient弃用。 (还请注意,Android不使用另一条评论中提到的httpclient 4.1。)

如果您有Apache HTTPClient更快的情况,请在此处报告为错误: http://code.google.com/p/android/issues/list

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top