【问题标题】:HttpURLConnection very slow compared to equivalent iOS implementation与等效的 iOS 实现相比,HttpURLConnection 非常慢
【发布时间】:2014-03-18 16:21:41
【问题描述】:

我正在为 iOS 和 Android 编写一个应用程序,它们都是原生的(没有 PhoneGap,没有 Titanium)。该应用程序的一般行为是从服务器获取 XML 文件,对其进行解析,然后根据其内容获取一些其他 XML 文件以及下载一些额外的数据文件(PDF、图像等)。有点像 RSS。

iOS 上的初始加载(当我清除了本地缓存以使所有内容都被拉下时)大约需要 20 秒。主提要不到 1 秒,其余内容不到 19 或 20 秒。

在 Android 上,大约需要 两分钟

现在,我很早就发现 XML 解析很受欢迎,所以我放弃了 XmlPullParser 并编写了一个 SAX 解析器,它加快了速度(一个 XML 文件从 20 秒解析到 2 秒,这仍然很慢与 iOS 相比)。但是,既然 XML 解析不再是影响性能的一个因素,那么网络性能就让我受不了了。

我已经用谷歌搜索并找到了很多关于这个的线程。我尝试了很多不同的方法,但都没有做任何事情,感觉更像是猜测而不是工程。

例如,我已经这样做了:

System.setProperty("java.net.preferIPv4Stack", "true");
System.setProperty("http.keepAlive", "false");

在我的 HttpURLConnection 上,我已将其设置为使用 NO_PROXY 和更短的连接超时,并禁止缓存。

HttpURLConnection c = (HttpURLConnection) url.openConnection(Proxy.NO_PROXY);
c.setConnectTimeout(1000);
c.setUseCaches(false);

没有任何帮助!

很明显,Android 的网络堆栈运行良好,而且运行速度很快——我使用过的各种接触网络的 Android 应用都非常快。很明显我做错了什么。但是什么?

请帮忙。我在这里束手无策。

【问题讨论】:

  • 使用 Traceview 准确确定您的问题所在。
  • 如果你想要性能,禁用缓存会适得其反。
  • @CommonsWare DDMS 的网络视图向我展示了我可以从日志中看到的内容 - 下载具有高带宽,但它们之间存在高延迟(或者可能在连接开始时开始之前)。它实际上并没有告诉我太多,但我承认我可能没有正确使用它。
  • @EJP 这就是我的想法,但我在这里看到的几十个帖子都建议禁用缓存来解决这个问题。
  • "DDMS 的网络视图" -- 我建议你使用 Traceview。 Traceview != 网络标签。

标签: android xml performance network-programming


【解决方案1】:

我还没有解决这个问题,但我已经弄清楚发生了什么。 这是延迟。

  1. Android 的 HttpURLConnection 显然有一个损坏的 http keep-alive 实现
  2. 可能与上述问题有关,http pipelining 也不起作用

我在单个 AsyncTask 中同步建立 URL 连接 - 我尝试了各种方法来加速它,比如一个接一个地完成所有连接,将它们的响应主体保存在内存中并稍后处理。这将它从 2 或 3 分钟秒加速到大约 1.5 秒,但这仍然是不可接受的。

在最后绝望的希望中我尝试了AsyncHttpClient

天哪,现在整个下载大约需要 20 秒,就像在 iOS 上一样。

所以,明智的说法是:如果您的 android 应用程序对服务进行了很多 GET,并且您无法重写该服务以将这些 GET 省略为一个大批量(我不能在这里)您 想使用 Android 的 HttpUrlConnection。使用 AsyncHttpClient。

不幸的是,AsyncHttpClient 的结构类似于 AFNetworking,这在 Java 上比在 ObjectiveC 中要尴尬得多。所以这需要一些技巧。但是效果真的很好。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-08
    • 2021-02-13
    • 2017-05-07
    • 1970-01-01
    • 2015-01-27
    • 2014-09-06
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多