手机屏幕被锁定时,onResume被反复调用

看来,如果在手机屏幕被锁定时活动位于前台,广播事件和/或唤醒锁将导致该活动的onResume被调用,无论它们是否适用于您的应用。 即使您没有以任何方式与手机互动,也会发生这种情况。 不要解锁它,不要触摸它,不要做任何事情,并且在没有相应的onPause的情况下反复调用onResume。

我们注意到了这一点,因为我们在onResume上记录了一个跟踪事件,我们注意到有些设备正在获取这些onResume事件的TON。 我们能够重新发现并注意到每次任何应用程序似乎都收到了意图(例如SugarSync,Google Voice或我们自己的应用程序中的被动位置监听器)时就会发生这种情况。

我们在运行ICS的Galaxy Nexus和Galaxy S3上注意到了这一点。 有趣的是,我们无法在Jelly Bean上重现这个问题。

任何人都有指向这里可能发生的事情的指示?

Related of "手机屏幕被锁定时,onResume被反复调用"

我在运行Gingerbread和ICS的几款手机上观察到相同的行为。 您的描述与我所看到的相符。 由于某种原因,即使屏幕仍处于锁定状态,活动也会触发onResume。 也许它恢复了一些操作系统级事件?

来自android文档的最佳方向似乎来自onResume定义中的这一段:

请记住,onResume不是您的活动对用户可见的最佳指标; 诸如键盘锁的系统窗口可以在前面。 使用onWindowFocusChanged(boolean)可以确定您的活动对用户可见(例如,恢复游戏)。

在开发Activity时,请记住onResume可以连续多次调用,而无需任何直接的用户交互。 所以基本上,不要在onResume中放置任何只能运行一次的代码,或者设计用于触发用户的即时响应。 您必须自己决定onResume或onWindowFocusChanged是否更适合您想要做的事情。