活动中广播意图出现ANR问题

11

我一直遇到这个错误。有人能告诉我它的意思或如何修复吗? 谢谢

07-03 08:27:13.615: ERROR/ActivityManager(61): com.fttech.books 中发生ANR

07-03 08:27:13.615: ERROR/ActivityManager(61): 原因:发送的Intent广播{ act=android.intent.action.TIME_TICK flg=0x40000004 (有额外信息) }

2个回答

19

ANR是"应用程序未响应"的缩写。这个消息意味着你的应用已经不再对用户做出响应了。通常,如果UI线程被一个超过5秒的操作阻塞,就会抛出此异常。

在这里可以找到关于此主题的一些信息

Android应用程序通常完全在单个(即主)线程上运行。这意味着,在主线程中执行的任何需要很长时间才能完成的任务都可能会触发ANR对话框,因为您的应用程序没有给自己处理输入事件或Intent广播的机会。

因此,请检查您的代码是否在UI线程上执行了任何长时间运行的操作。


13
请注意,BroadcastReceiveronReceive() 方法在主应用程序线程上被调用。 - CommonsWare
1
谢谢!我已经弄清楚了。在我的SQL数据库查询中,我遗漏了两个非常重要的列,这些查询需要但没有给出语法。所以一旦我添加了它们,问题就解决了!所以我做了你做的事情,逐个注释每个方法,看看问题出在哪里。果然是那个问题。 - tj walker
在UI线程中启动IntentService是否会是一个长时间运行的操作?因为我正在我的onReceive()方法中这样做。 - IgorGanapolsky
在Android Studio中调试从AppWidget派生的类的onReceive()方法时收到此错误是否正常? - Para
但我只是在sharedpreference上保存布尔值。这是ANR的原因吗? - Yeung

1

Flo在解释这个问题时是完全正确的。
在我的情况下,设置onReceive()方法中的一些断点并尝试使用Intent启动Activity会导致调试停止。我可以完美地复现这个问题。

解决方法是禁用所有断点并在新Activity的开始处设置它们,或者如果需要调试onReceive(),则使用Log()函数记录发生的事情。
代码中还可能存在其他错误导致调试停止。


感谢您的纠正,BADSHAH :) - xtrm

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