我刚刚开发了一个屏幕保护程序应用程序,我在其生命周期中发现了一个奇怪的行为。 我的工作流程是这样的:
RegisterService
,我在其中调用registerReceiver
方法注册BroadcastReceiver
,可以接收ACTION_SCREEN_OFF
。 2.在此onReceive
的{{1}}方法中,我启动了一项活动作为屏幕保护程序。
3.在活动中,我编写BroadcastReceiver
语句来跟踪其运行情况。
我的问题是:
当屏幕超时或按POWER键时,屏幕关闭,系统将发送ACTION_SCREEN_OFF消息。正如我所料,我的接收器启动屏幕保护程序活动。但是,我发现此活动会根据logcat中的输出顺序调用Log.i()
,onCreate()
,onResume()
,onPause()
。
似乎某个活动出现在我的屏幕保护程序前面并立即完成,因此我的屏幕保护程序会调用onResume()
然后调用onPause()
。
有什么想法吗?这个问题困扰我编程,请帮忙。谢谢!
答案 0 :(得分:0)
我可以推荐一些非常容易的东西,如果您不想要暂停行为,为什么不尝试覆盖方法onPause()
并且什么也不做:P don'请拨打super.onPause()
,这将终止其行为。
可能对你有用的其他东西,声明一个静态变量,在“onResume()”方法上加1,在调用“onStop()”时返回“0”。现在只评估何时调用“onResume()”,如果变量为“0”则是第一次,其他任何事情都无效。
我希望这有助于使您的问题没有太多信息更具体。
答案 1 :(得分:0)
基于对PowerManagerService.java源代码的简要研究,当关闭屏幕时,系统会启动动画(查看类源的第2183行)来执行此操作。这意味着您的活动将暂停,然后在动画结束后恢复。
我无法100%确定这一点,因为我没有在我的环境中测试它,但这是我找到的唯一合理的解释。
希望这会有所帮助......