我的屏幕保护程序应用程序中的奇怪生命周期行为

我刚开发了一个屏幕保护程序应用程序,我在其生命周期中发现了一个奇怪的行为。 我的工作流程是这样的:

  1. 启动我的RegisterService ,我在其中调用registerReceiver方法来注册一个BroadcastReceiver ,它可以接收ACTION_SCREEN_OFF

2.在这个BroadcastReceiveronReceive方法中,我启动一个活动作为屏幕保护程序。

3.在活动中,我编写Log.i()语句来跟踪它的运行情况。

我的问题是:

当屏幕超时或按POWER键时,屏幕关闭,系统将发送ACTION_SCREEN_OFF消息。 正如我所料,我的接收器启动屏幕保护程序活动。 但是,我发现这个Activity依次根据logcat中的输出调用onCreate()onResume()onPause()onResume()

好像有些活动出现在我的屏幕保护程序前面并立即完成,所以我的屏幕保护程序调用onPause()然后调用onResume()在此处输入图像描述

任何想法? 这个问题困扰我编程,请帮忙。 谢谢!

基于对PowerManagerService.java源代码的简要研究,当关闭屏幕时,系统会启动animation(查看类源的第2183行)来执行此操作。 这意味着您的活动将暂停,然后在animation结束后恢复。

我不能100%肯定这一点,因为我没有在我的环境中测试它,但这是我find的唯一合理的解释。

希望这可以帮助…

我可以向你推荐一些可能对你super.onPause()东西,如果你不想要暂停行为,你为什么不尝试覆盖方法onPause()而什么也不做:P 不要调用super.onPause()和这将终止它的行为。

其他可能对你有用的东西,声明一个静态variables,在“onResume()”方法上加1,在调用“onStop()”时返回“0”。 现在只评估何时调用“onResume()”并且如果variables为“0”那么这是第一次,其他任何事情都没有。

我希望这有助于因为没有太多关于你的问题的信息更具体。