【问题标题】:Strange broadcast receiver race condition奇怪的广播接收器竞争条件
【发布时间】:2014-03-28 20:49:00
【问题描述】:

我有一个正在监听屏幕关闭的 BroadcastReceiver。

由于我不会进入的原因,我需要我的 Activity 在它暂停时完成()。

但是,广播需要很长时间才能到达,以至于当它执行 onDestroy 方法(这是我可以放置的最后一个地方)时,已经注销了接收器,所以我的 Activity 永远不会收到屏幕有通知睡着了。

在有史以来最丑陋的事情中,我发现如果我设置了大约 500 毫秒的延迟并在 onPause 中从延迟的 Runnable 调用 finish(),一切都会按预期工作。但是,这非常丑陋,我想知道是否还有其他方法可以解决此问题。似乎这*只是屏幕超时广播中的一个问题,因为屏幕关闭的动作为我调用了 onPause(它调用了 finish())。其他广播在白天到达(可以这么说),因此它们不会产生与稍后处理它们相同的问题。

【问题讨论】:

  • activity得到广播后做了什么?听起来它做了一些与 UI 无关的事情,在这种情况下,如果您希望它在 UI 不活动时也能正常工作,那么将其放入 Service 而不是 Activity 可能是有意义的。
  • 在特定条件下启动主要活动。我想我可以将这种行为转移到服务中,你是对的。
  • 是的,我刚刚移植为服务,现在一切正常。请添加您的建议作为答案,我会给您打勾

标签: android android-activity broadcastreceiver race-condition onpause


【解决方案1】:

听起来它做了一些与 UI 无关的事情,在这种情况下,如果您希望它在 UI 不活动时也能正常工作,那么将其放入 Service 而不是 Activity 可能是有意义的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 2022-01-23
    • 1970-01-01
    • 2018-10-08
    • 1970-01-01
    相关资源
    最近更新 更多