避免在调试过程中出现应用程序无响应问题

27

我对Android开发很新,遇到了一个调试问题。我知道ANR的作用,并且在正常运行我的应用程序时没有看到它们。但是,当我尝试调试我的BoradcastReceiver时,速度太慢,就会弹出ANR消息。

在调试过程中有没有办法关闭ANR?我可以使用日志语句查看发生了什么,但这很烦人....

编辑:实际上,我不想在LogCat中抑制ANR,我想告诉Android在调试期间不要抛出ANR。我的意思是允许广播接收器超过5秒钟运行。但我想这是不可能的,相反我应该委托给一个服务,它被允许运行更长时间,而且我也可以更容易地调试。

提前感谢!

问候


4
2015年至今仍未解决......或者我错过了什么? - sean.net
6
2017年至今仍未找到解决方案......或者是我错过了什么? :D - kAmol
7
2019年了,还是没有解决方案...或者我错过了什么? - ARLabs
7
2021年了,还是没有解决方案……或者我错过了什么? - hyb1996
2
2022年了,还是没有解决方案……或者我错过了什么? - Debdeep
显示剩余3条评论
3个回答

13

前往“设置” -> “开发者选项”,勾选“显示所有ANR”。

这将为在后台运行的应用程序显示一个“应用未响应”的对话框。您可以在对话框中点击“等待”按钮,以防止系统杀死您的进程。请注意,对于在前台运行的应用程序,该对话框会自动打开。对于后台应用程序,您需要启用此选项。


你知道这个选项从什么时候开始可用吗? - andreas

2

您可能会发现这个资源对于解决您的问题很有用。主要内容如下:

  • 使用-w选项使进程等待调试器附加。这实际上有助于在onCreate()的断点上停止。调试标志在附加调试器后被清除。下次应用程序以常规方式启动。
  • 使用--persistent选项每次进程启动时等待调试器。
  • 使用adb shell am clear-debug-app your.app.package撤消--persistent

我真的很喜欢一个8年前的问题仍然能够提供价值。感谢您的添加! - andreas

1

不行。这个消息是通过Android操作系统处理的,而不是你的应用程序,因此无法在模拟器上隐藏它。如果您不想看到它,并且您的BroadcastReceiver正确接收了调用,只需不运行成功的代码,您可以使用try-catch块,而不是您的应用程序崩溃,catch将被处理,在其中您可以制作Toast消息或任何您希望的内容。


似乎我没有表述清楚我的意图。我将编辑我的原始帖子。谢谢! - andreas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接