【问题标题】:Android URL intent: browser is very slow to openAndroid URL意图:浏览器打开速度很慢
【发布时间】:2018-09-04 11:05:21
【问题描述】:

在我们的应用中,通过点击一个按钮,我们需要在浏览器中打开一个网站

    Intent openBrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(openBrowserIntent);

我们发现浏览器需要很长时间才能打开,可能是因为链接包含一些重定向?

intent 中是否有任何参数,强制我们一点击就打开浏览器?否则,用户将在 2-3 秒内看不到任何事情发生

【问题讨论】:

  • 如果只是一个网页,您可以在您的应用中实现 webview 以减少时间并快速加载页面
  • 很遗憾我们需要重定向到浏览器
  • chrome 浏览器的直接意图如何?
  • @Quicklearner 怎么样?
  • 很遗憾,没有速度提升

标签: android google-chrome url android-intent start-activity


【解决方案1】:

chrome 浏览器的直接意图

String urlString="URL_HERE";
Intent intent=new Intent(Intent.ACTION_VIEW,Uri.parse(urlString));
intent.setPackage("com.android.chrome");
try {
    context.startActivity(intent);
} catch (ActivityNotFoundException ex) {
    // Chrome browser app not installed
    intent.setPackage(null);
    context.startActivity(intent);
}

这是您首先选择浏览器然后在选择时加载页面的意图

    Intent openBrowserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
    startActivity(openBrowserIntent);

请同时在不同的设备上测试这两种情况

【讨论】:

  • 不想使用 Chrome 的用户怎么办?没有拥有 Chrome 的用户怎么办?
  • 要求很明确,加载 URL 并且在 catch 块中有一个解决方法,如果没有 chrome 浏览器,它会要求用户在这种情况下选择浏览器
  • 您正在处理“没有 Chrome”的情况。您没有处理“不想使用 Chrome”的情况。
  • 好吧,Chrome 似乎是一款完美的浏览器,因为现在它加载速度非常快,并且使用了缓存,人们实际上会选择它。大多数 Stock 和 Customized OS 都预装了 chrome,没有人会介意不先询问浏览器
【解决方案2】:

我们发现浏览器需要很长时间才能打开,可能是因为链接包含一些重定向?

您可以通过尝试一个不涉及重定向的更简单站点的 URL 并查看它的打开速度来测试这一点。您还可以通过将Intent 替换为仅在其他应用程序(例如设置)中启动普通活动的活动来测试这一点。这将帮助您缩小范围:

  • 启动其他应用程序是否缓慢?如果是,则问题与设备有关(可用系统 RAM、CPU 等)

  • 浏览器启动速度慢吗?如果是,那么您对此无能为力,但请注意性能会因浏览器而异,并且有许多适用于 Android 的 Web 浏览器

  • 让浏览器显示这个特定的 URL 很慢吗?如果是这样,请修复网站以降低速度。在许多情况下,这将带来的好处不仅仅是您的 Android 浏览器显示页面的速度,例如帮助通过其他方式访问此页面的用户。

intent 中是否有任何参数,强制我们一点击就打开浏览器?

不,没有EXTRA_COULD_YOU_PLEASE_OPEN_QUICKLY_KTHXBYE 或类似的额外内容。同样,没有FLAG_ACTIVITY_AW_COME_ON_GET_MOVING_ALREADY 标志。您可以尝试用android.intent.action.VIEW_NOW_NOW_NOW 替换您当前的操作,但我怀疑它只会导致ActivityNotFoundException。 :-)

【讨论】:

  • 这很奇怪,我有一个 Google Pixel 2,所以我认为 RAM 和 CPU 不是问题。我用其他网址试过了,打开还是很慢。我还尝试使用“旧”的 Nexus 5X,打开浏览器活动也很慢。我记得,使用同一个应用程序,在浏览器上打开一个 url 曾经相当快。很奇怪。
  • 但是看起来,对于不同的页面,浏览器打开时间是不同的。因此,页面越快,浏览器打开的速度就越快。我希望可以在您单击时立即打开浏览器,但似乎 Android 不提供此功能。
  • @DanieleB:重定向对案件没有帮助。 Android 需要发出 HEAD 请求以获取 MIME 类型,以便完全制作 Intent,并且重定向会导致多个 HEAD 请求。您可以尝试setDataAndType(),而不是在Intent 构造函数中提供Uri,看看这是否允许Android 绕过那些HEAD 请求,如果您相当确定此URL 将始终出现在某个网页上.
  • 我刚试过:Intent intent = new Intent(Intent.ACTION_VIEW); intent.setDataAndType(Uri.parse(url), "text/html"); startActivity(intent); 但加载时间是一样的。我决定在点击后在工具栏上显示一个进度,所以至少这会给用户一个反馈,告诉用户等待。还是非常感谢
猜你喜欢
  • 2016-08-11
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-09
相关资源
最近更新 更多