我刚开发了一个屏幕保护程序应用程序,我在其生命周期中发现了一个奇怪的行为。 我的工作流程是这样的:
RegisterService
,我在其中调用registerReceiver
方法来注册一个BroadcastReceiver
,它可以接收ACTION_SCREEN_OFF
。 2.在这个BroadcastReceiver
的onReceive
方法中,我启动一个活动作为屏幕保护程序。
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”那么这是第一次,其他任何事情都没有。
我希望这有助于因为没有太多关于你的问题的信息更具体。