【发布时间】: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