开发者

Strange lifecycle behavior in my Screen Saver App

开发者 https://www.devze.com 2023-03-20 22:01 出处:网络
I just developed a screen saver app and I found a strange behavior in its lifecycle. My work flow is like this:

I just developed a screen saver app and I found a strange behavior in its lifecycle. My work flow is like this:

  1. start my RegisterService, where I call registerReceiver method to register a BroadcastReceiver, which can receive ACTION_SCREEN_OFF.

2.In the onReceive method of this BroadcastReceiver, I start an activity as the screensaver.

3.In the activity, I wr开发者_开发技巧ite Log.i() statement to track its running.

My question is:

When the screen times out, or when I press the POWER key, the screen turns off, and the system will send ACTION_SCREEN_OFF message. As I expect, my receiver starts the screen saver activity. However, I find this Activity calls onCreate(), onResume(), onPause(), onResume() sequentially according to the output in logcat.

It seems as if some a activity comes at front of my screensaver and finishes immediately, so my screensaver calls onPause() and then onResume().

Strange lifecycle behavior in my Screen Saver App

Any idea? This problem handicaps me in programming, please help. Thanks!


Well based on a brief study of the PowerManagerService.java source code, when it's time to turn the screen off, the system initiates an animation (look at line 2183 for the class source) to do that. That means that your activity will pause and then will resume after the animation has ended.

I cannot be 100% sure for this, since I haven't tested it in my environment but this is the only logical explanation I found for your situation.

Hope this helps...


I can recommend you something very easy that might work for you, if you do not want the pause behavior why don't you try to Override the method onPause() and just do nothing :P don't call super.onPause() and that will terminate the behavior of it.

Other thing that might work for you, declare a static variable, add 1 on the "onResume()" method and return to "0" when "onStop()" is called. now just evaluate when the "onResume()" is called and if the variable is "0" then is the first time, anything else do nothing.

I hope this helps cause there is no much information on your question to be more specific.

0

精彩评论

暂无评论...
验证码 换一张
取 消