奇怪的广播接收器竞争条件

时间:2014-03-28 20:49:01

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

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

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

然而,广播需要很长时间才能到达onDestroy方法(这是我可以放置它的最后一个位置)已经取消注册接收器,所以我的活动永远不会得到通知屏幕已经睡着了。

在什么是最丑陋的kluge中,我发现如果我设置延迟大约500ms并从onPause中的延迟Runnable调用finish(),一切都按预期工作。然而,这是非常丑陋的,我想知道我还能做些什么来解决这个问题。看起来这只是屏幕超时广播中的一个问题,因为屏幕关闭的动作为我调用onPause(调用finish())。其他广播在白天到来(可以这么说),所以它们不会产生同样的问题,因为它们会在一瞬间处理。

1 个答案:

答案 0 :(得分:1)

这听起来好像是一些非UI相关的东西,在这种情况下,如果你想要它在Service而不是Activity可能是有意义的,即使你的UI是不活跃。