【问题标题】:BroadcastReceiver onReceive timeout广播接收器 onReceive 超时
【发布时间】:2011-06-06 16:58:09
【问题描述】:

我扩展BroadcastReceiver,并在onReceive() 中做我需要做的任何事情。

onReceive() 超时,来自文档:

有 10 秒的超时 系统允许在考虑之前 接收器被阻塞和一个 被杀的候选人

当我处于调试模式时,这会产生问题。我需要超过 10 秒(有时)。如果我没有在 10 秒内完成所有调试,我的连接将关闭并停止调试。

我可以增加超时或禁用它以进行调试吗?

谢谢。

【问题讨论】:

  • 如果你在广播接收器中做的事情甚至超过了几分之一秒,那么你做错了。
  • 在下面阅读我的评论。我说的是调试模式。

标签: android timeout broadcastreceiver


【解决方案1】:

为了防止您的应用在调试期间在断点处暂停时强制关闭,请尝试安装 Dev Tools 应用并启用 Debug App 设置:

让您选择应用程序 调试。您不需要将其设置为 附加一个调试器,但设置这个 值有两个作用:

  • 如果您在 断点很长一段时间 调试。

所有详情都在这里:http://developer.android.com/tools/debugging/debugging-devtools.html

如果您在 onReceive 方法中执行一些复杂的操作,请考虑让您的 BroadcastReceiver 启动 Service 并传递从 onReceive 中获取的数据。然后Service 可以进行更长的处理。

【讨论】:

  • 这是正确的。广播接收器的唯一目的应该是将数据传递给其他东西。
  • 伙计们,我同意你的看法。你说的对。在发布版本中,它根本不应该花那么长时间。但是当我通过我的代码进行调试时,我是在调试模式下说话。
  • 处于“调试”模式并不重要。您仍然希望接收器立即传递给另一个组件,这可能是 elevine 推荐的服务。那是正确的设计,它会更容易调试和排除故障,并且不会导致接收器超时(做你的日志记录,或者其他什么需要更长的时间?在服务中)。
  • 你的意思是你在你的 onReceive 方法中设置了一个断点,当你暂停时应用程序强制退出?
  • @elevine 是的,完全正确。对不起,我没有在问题中说得足够清楚。
【解决方案2】:

即使在调试模式下我也遇到了这个问题。事实证明,另一个广播正在发送并且没有被处理,因为我正在主线程上调试另一个广播。 Android 认为我的进程处于 ANR 并终止了整个进程。

我不得不临时修改代码,以便在调试时不调用其他广播。

【讨论】:

  • 你对它的修改程度如何?我也有同样的问题。
  • @Para,我在从断点开始调试的部分中注释掉了发送广播的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多