gpt4 book ai didi

android - 在 Chrome 自定义选项卡中从 WebView 打开链接时出现 ANR 对话框。我该如何调试?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:44:27 28 4
gpt4 key购买 nike

我想使用 Chrome 自定义标签正确处理域外的 URL。这是代码

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;
}
}
});

但是,当我点击域外 URL 时,偶尔会出现 ANR 对话框并且应用程序的 UI 卡住。

我尝试调试 anr 跟踪但没有发现可疑线程。ANR 跟踪文件很长,所以我把它贴在这里: https://gist.github.com/hoavt-54/42f1109c0619eed81e82a9a8d1128a6d

如果您对如何调试应用程序或如何理解跟踪文件有任何建议,我将不胜感激。

最佳答案

5 秒规则无关紧要 - 即使阻塞主线程 1 秒也会对用户显示为卡住的应用。

系统始终在后台和前台为您的应用执行的工作量巨大,而且全部在主线程上完成。因此,当您没有立即从任何回调 (onXyz()) 返回时 - 整个世界都在阻塞等待您,不会绘制任何内容,也不会到达任何触摸事件,等等。

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

永远不要在主线程上做任何这些:

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

以上都会导致用户随机出现ANR。

关于android - 在 Chrome 自定义选项卡中从 WebView 打开链接时出现 ANR 对话框。我该如何调试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45260312/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com