当前位置: 首页 > 知识库问答 >
问题:

在Chrome自定义选项卡中打开WebView链接时获得ANR对话框。如何调试?

秦永望
2023-03-14
webView.setWebViewClient(new WebViewClient() {
    public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request){
        String url = request.getUrl().toString();
        if(url.startWith("http://my.domain.name"))
          return false;
        else{
            CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder();
            builder.setToolbarColor(getResources().getColor(R.color.colorPrimary));
            builder.setStartAnimations(getActivity(), R.anim.slide_in_right, R.anim.slide_out_left);
            builder.setExitAnimations(getActivity(), R.anim.slide_in_left, R.anim.slide_out_right);
            Intent actionIntent = new Intent(
                                getApplicationContext(), ActionBroadcastReceiver.class);
            actionIntent.setData(Uri.parse(url));
            PendingIntent menuItemPendingIntent =
                                PendingIntent.getBroadcast(getApplicationContext(), 0, actionIntent, 0);
            builder.addMenuItem(getString(R.string.action_share), menuItemPendingIntent);
            CustomTabsIntent customTabsIntent = builder.build();
            customTabsIntent.launchUrl(getActivity(), Uri.parse(url));

            return true;
        }
    }
});

共有1个答案

闾丘卓
2023-03-14

5秒规则是不相关的-即使1秒阻塞主线程将会出现在用户面前,作为一个卡住的应用程序

系统在后台和前台为您的应用程序所做的工作量一直是巨大的,而这一切都是在主线程上完成的。所以当您没有从任何回调(onxyz())中立即返回时--整个世界都在阻塞等待您,什么都不会被绘制,没有触摸事件会到达,等等。

所以千万不要在主线程上进行任何网络调用。它总是会导致ANR,至少在某些设备的某些时间,例如当他们的网络关闭。

千万不要在主线程上执行这些操作:

  • 读取/写入本地文件系统,包括属性和数据库
  • 繁重的计算
  • 网络
  • 任何类型的长时间运行/繁忙循环

以上这些都会造成用户随机的ANR。

 类似资料:
  • 我正在尝试制作一个活动,它有几个文本视图,这些文本视图反过来又包含超链接。我使用了以下教程:http://www.android-examples.com/add-hyperlink-in-android-application-through-textview/ 我想让这些链接在chrome自定义标签点击时打开(类似于Gmail)。但我找不到任何教程说明如何这样做。

  • 问题内容: 新标签页正在打开,但URL链接未打开。 问题答案: 我检查了以下代码,它对我来说很好。我从这里找到了答案。

  • 我正在我的android应用程序中实施Fit-bit rest客户端授权。我使用自定义选项卡打开Fitbit授权URL,如“https://www.fitbit.com/oauth2/authorize?response_type=code 未报告此行为的日志。 任何建议都可能有助于我理解这种行为。

  • 在我的应用程序中,我通过Chrome自定义标签打开了一个url。我们知道,当用户点击设备后退按钮或自定义后退按钮时,Chrome自定义标签会被关闭。是否有可能关闭Chrome自定义标签通过编程而不需要用户干预。

  • 当我打开显示对话框的文件时,我需要更改Java图像并添加我自己的图像。如何自定义对话框? 例如,我需要将编码添加到对话框以及如何将不同类型的文件添加到类型下拉框的文件中。例如,我将、、添加到框。 这是我的密码,

  • 我想打开我在新选项卡中找到的网站链接。我已经尝试打开一个新的标签,并将链接的url传递给这里建议的驱动程序,然而,新的标签根本不会打开。(关于如何打开新标签,还有其他几个建议,但似乎都不适合我。) 因此,我最近的尝试是右键单击链接并按“T”以在新选项卡中打开链接,如下所示: