Reputation: 1199
I know, this question is asked before on stackoverflow, but non of the answers worked for me.
Probably worth mentioning:
onSaveInstanceState
IS called when I press the home button. The method onCreate
just always gives NULL for the Bundle savedInstanceState
.onRestoreInstanceState
is never called at all. (I wouldn't mind if the onCreate
worked ;)).super.onSaveInstanceState(outState)
at the bottom of onSaveInstanceState
. No luck either.Here's the code. I hope someone had this problem and solved it.
public class MainActivity extends SherlockFragmentActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
private static String STATE_TO_STORE = "state_to_store";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(LOG_TAG, "onCreate: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));
// ... more code...
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
Log.d(LOG_TAG, "onRestoreInstanceState: savedInstanceState = " + (savedInstanceState == null ? "NULL" : "Not NULL"));
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt(STATE_TO_STORE, 5); // store some int
Log.d(LOG_TAG, "onSaveInstanceState bundle: " + outState.toString());
}
// ... more code ...
}
The logging clearly states onSaveInstanceState
is being called and onCreate gets savedInstanceState = NULL
.
Upvotes: 6
Views: 21049
Reputation: 8601
In my case, the reason was that the specific activity did not have a theme declared in the manifest file.
To fix this, open AndroidManifest.xml, click Application, select the crashing activity in Application Nodes and add the theme in the Theme field of Attributes. In my case, it was
@style/Theme.AppCompat.Light.DarkActionBar
but you could copy the theme from one of your other activities.
P.S.: I know this is an answer to an old question, but I've stumbled upon it while searching for a fix and didn't find a working solution so this might help others.
Upvotes: 3
Reputation: 129
Check that your manifest does not contain android:noHistory="true".
I spent hours looking for an answer and it was that simple.
Upvotes: 12
Reputation: 18151
When you press the HOME button, your activity is pause and not destroyed Thus when you launch the app again from home screen, onCreate is not called, unless the OS kill your app to reclaim memory. If you want your activity to be recreated when launch from the home screen, put this line android:finishOnTaskLaunch="true"
in the activity manifest.
Upvotes: 2
Reputation: 17115
onRestoreInstanceState (or saved bundle in onCreate) will be fired when the Activity was killed by the system due to lack of resources and restarted when you get back to it. The Activity might not be killed (just stopped) and restarted without going through onRestoreInstanceState. Another words, onSaveInstanceState will be always called, but onRestoreInstanceState will be called if it is killed and restored by the system. Not just stopped and restarted, not paused and resumed and not started by a new intent.
Check my explanation here. I'm sure it covers your question.
when is onRestoreInstanceState called?
Upvotes: 2