9

我在 Android 上开发时遇到了这种有点奇怪的行为,在我用谷歌搜索时,我能找到的唯一答案是这是设计使然,我不应该关心它。

我的应用程序在活动时获取位置数据,我正要实现一种方法来节省电池电量,方法是在调用 onPause 事件时停止位置更新,然后在调用 onResume 事件时恢复获取。

在调试时,我注意到锁定手机时出现了这种奇怪的行为,onPause->onResume 被依次调用了三次或更多次,然后以 onStop 事件结束。我能找到的唯一答案是:这就是android的工作方式,没关系。

我想我很好奇,有人可以解释我需要多次停止和恢复一个简单的子活动吗?这不会消耗更多的电池,尤其是对于在 onResume 中有严重代码的大型活动?有没有办法防止这种情况发生?如果知道至少我在这些事件中的代码不会被调用,我会很高兴,也许有一个 if{} 块可以防止不必要的 CPU 周期。

非常感谢任何见解!

4

2 回答 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
            }
        }

}

您需要将此 ScreenReceiver 类的广播接收器注册到 androidMenifest.xml

于 2012-07-05T18:02:42.917 回答
0

我最近遇到了同样的问题,并且能够通过对清单文件中的活动进行配置更改来阻止它的发生。我相信当用户锁定设备时,可能会发生一些事情:方向会改变,屏幕大小会改变(如果导航栏或通知栏消失)等等,这会导致 Android 重建所有活动和片段。我最终在 Config 更改中选择了很多选项,并且在 onPause 之后停止调用 onResume。

于 2013-02-07T04:10:51.880 回答