安卓手机锁屏会导致多次后续的onPause/onResume事件。

9
我在开发Android应用时遇到了一种有些奇怪的行为,通过谷歌搜索,我唯一能找到的答案是这是出于设计考虑,我不需要在意它。
我的应用程序在活动状态下提取位置数据,我打算实现一种节省电池的方法,即在调用onPause事件时停止位置更新,并在调用onResume事件时恢复提取。
在调试过程中,当锁定手机时,我注意到这种奇怪的行为,onPause-> onResume会连续调用三次或以上,然后以一个onStop事件结束。 我唯一能找到的答案是:这就是Android的工作方式,请不要在意。
我想我很好奇,有人能解释一下需要多次停止和恢复简单子活动的原因吗?这样做不会消耗更多的电池吗,特别是对于在onResume中有严格代码的更大的活动? 是否有一种方法可以防止这种情况发生? 如果我的代码在这些事件中不被调用,那么只要使用if{}块防止不必要的CPU周期,我就会很高兴了。
非常感谢您的任何见解!
2个回答

1

您需要注册广播接收器来处理“屏幕超时”和“屏幕锁定”事件。

您只需停止数据检索即可。 示例代码:

public class ScreenReceiver extends BroadcastReceiver {     

        @Override
        public void onReceive(Context context, Intent intent) {
            if (intent.getAction().equals(Intent.ACTION_SCREEN_OFF)) {
                //screen locked, do here 
            } else if (intent.getAction().equals(Intent.ACTION_SCREEN_ON)) {
                //screen unlocked, do something here
            }
        }

}

您需要在androidMenifest.xml中为此ScreenReceiver类注册广播接收器


谢谢,那应该就可以了。实际上,我想要更多关于为什么会发生这种情况的细节,但可能我要求太多了。 - r41n

0

我最近遇到了相同的问题,通过在清单文件中的活动中尝试Config更改,成功避免了这种情况。我认为,当用户锁定设备时,可能会发生几件事:方向可能会改变,屏幕大小可能会改变(如果导航栏或通知栏消失等),等等,这会导致Android重建所有活动和碎片。最终,我选择了许多Config更改选项,这使得程序在onPause之后不再调用onResume。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接