Apache http客户端或URLConnection

Ami*_*Raz 53 java android urlconnection apache-commons-httpclient

我需要在Android应用程序上下载一个网页,我很难决定是否使用android apache http客户端或java的URLConnection.

有什么想法吗?

Ido*_*lon 45

自Gingerbread以来,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错误修复和供应商更新的额外好处).然而,有一个缺陷:为了防止与内置库发生可能的冲突,您应该使用JarJar工具重命名httpclient包.原来有人已经这样做了(重新打包的jar和Android库项目可供下载):

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

这是针对Android的HttpClient 4.1的重新打包.Android SDK中的HttpClient版本为4.0beta2.自从4.0beta以来,已经对HttpClient和一些急需的错误修正(如auth缓存)进行了一些更新.

由于Google已弃用HttpClient而支持Java标准HttpURLConnection,因此我创建了一个脚本,将Apache的HttpClient的股票版本转换为Android库.

库存HttpClient的变化

  • 将所有包org.apache.http重命名为ch.boye.httpclientandroidlib
  • 删除了依赖于org.ietf的所有类.*(SPNEGO身份验证)
  • 用android.util.Base64替换了org.apache.commons.codec.binary.Base64
  • 创建了一个新类HttpClientAndroidLog来替换org.apache.commons.logging


dav*_*e.c 27

对于大多数事情,我会说这HttpClient是要走的路.然而,有些情况和边缘情况,我会回到a URLConnection.边缘情况的例子在这里这里

编辑
之前已经提出类似的问题:httpclient vs httpurlconnection. 我认为它HttpUrlConnection更快,因为HttpClient它建立在标准Java库之上.但是,我会发现HttpClient代码更快更容易编写和维护.根据下面的评论,核心要素HttpClient已经过性能优化.

如果性能是一个主要问题,最好的办法是编写两个客户端,一个使用每种方法,然后对它们进行基准测试.如果您这样做,请告诉我们结果.

  • @戴夫.在优化HttpCore(HttpClient基于的低级传输组件)方面已经付出了很多努力.已经采取特殊情况来确保在请求执行过程中仅创建最少量的中间垃圾.但请注意,我个人参与了HttpClient的开发,因此我的观点可能有偏见. (5认同)
  • @oleg遗憾的是,由于所谓的"兼容性要求"(从现在的API 8开始被删除的VMRuntime怎么样),Android将永远不会附带HttpClient 4.1.我个人认为他们只是不想打扰你的httpclient与你的开发保持同步(现在谷歌默默地决定弃用它),但这并没有改变这一点 - 在Android上使用HttpClient 4.1的唯一方法是将其作为单独的Jar重命名包包含在内以避免与内置版本发生类冲突. (5认同)
  • HttpClient 4.1应该比HttpUrlConnection快得多.请参阅http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore.在我的测试中,只有普通的HttpCore比HttpClient更快 (2认同)
  • 我在Android Dalvik团队中找到了这个博客.它说最好使用HttpURLConnection前进.http://android-developers.blogspot.com/2011/09/androids-http-clients.html (2认同)

Ell*_*hes 14

在姜饼和后来,HttpURLConnection是要走的路.考虑不推荐使用Apache HttpClient.(另请注意,Android不使用HttpClient 4.1,在另一条评论中提及.)

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

  • 休斯:谷歌本身告诉我们最后一个I | O恰恰相反,我们应该使用HttpClient而不是使用`HttpUrlConnection`.而且,自从我上次看,"HttpURLConnection"是通过HttpClient实现的.这真的非常重要,所以如果我们能够更多地宣传这一点,如果这确实是谷歌希望我们前进的方向,那就太好了. (8认同)
  • @CommonsWare最近才宣布:http://android-developers.blogspot.com/2011/09/androids-http-clients.html.`[HttpClient]实现稳定,并且它们有很少的bug.但是这个API的大尺寸使我们很难在不破坏兼容性的情况下对其进行改进.Android团队没有积极致力于Apache HTTP Client.OGG.我记得oleg [试图同步](http://old.nabble.com/HttpClient-in-Android-ts27915358.html)如何与Android团队进一步开发项目.而现在他们决定弃用HttpClient - 这真是一种耻辱. (2认同)
  • *如果您有Apache HttpClient更快的情况,请在此处将其报告为错误* - :) (2认同)

归档时间:

查看次数:

61237 次

最近记录:

11 年,11 月 前