Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Prevent Android activity from being recreated on turning screen off

How to prevent an activity from being recreated on turning screen off?

What I do

  1. Start Bejewels and go to the jewelry screen.
  2. Press power button shortly. The screen is turned off, but the device is not.
  3. Press power button again.

What I see

The same screen as before turning screen off.

In case of my application (trivial one, just a web-app with a single WebView) the scenario is the following:

What I do

  1. Start my app. The activity onCreate() method loads an URL into the WebView.
  2. Press power button shortly. The screen is turned off, but the device is not.
  3. Press power button again.

What I see

The WebView is reloading the page.

What I expected

As in Bejewels case I want to see the same screen, that for my app is the page in its previous state: scripts are running, a form fields are filled etc.

Debugging showed, that I was wrong (in a previous question) and onDestroy() and onCreate() are being called one-by-one when the screen is just turned on. And since I still hear a music, played by a script, when the screen is off, it looks like both the activity and the WebView do exist until I press power button again.

What I tried.

  1. android:alwaysRetainTaskState="true" The same behavior.
  2. Reading about intents (to no avail, I just did not understand, how they are applied to my situation).
  3. Using PhoneGap. It behaves differently: just kills the whole application on pressing power button. This IS better, but not the best.
like image 615
noober Avatar asked May 08 '12 12:05

noober


People also ask

What happens to activity when device is rotated?

When you rotate your device and the screen changes orientation, Android usually destroys your application's existing Activities and Fragments and recreates them. Android does this so that your application can reload resources based on the new configuration.


1 Answers

The solution to this problem may be the same as that described here: onDestroy gets called each time the screen goes on

It sounds like your activity is being restarted due to configuration changes, see http://developer.android.com/guide/topics/resources/runtime-changes.html. The most common is when your app is in landscape mode (like most games) and then the screen lock is engaged by tapping the power button. The screen-lock is in portrait mode and therefore triggers a change in orientation which triggers the activity to be restarted.

This behaviour can be overridden by adding:

android:configChanges="orientation|keyboardHidden"

... to your manifest file if you are targeting API level less than 13. Or

android:configChanges="orientation|keyboardHidden|screenSize"

... if you are targeting API level greater than 13.

Note you may need to go project->properties and update your project build target. 'screenSize' will not be recognised if your build target is less than 13.

It may be a different configuration change that is causing the activity to be reset. The following link provides a list of the possible configuration changes: http://developer.android.com/guide/topics/manifest/activity-element.html#config

like image 62
Twice Circled Avatar answered Sep 26 '22 06:09

Twice Circled