What happens is that when the application loses focus, it begins a cycle that is part of the life cycle of an Android application, when an Activity is no longer visible (nor in the foreground) the onStop
is called this means that from this point on, the system (whose management has some changes from version to version of Android) may decide to destroy this activity (calling the onDestroy()
method).
Android Life Cycle:
WhenthesystemdestroysyourActivity,itstorestheActivitystateintheBundles,soallViewsmusthaveID'stobeidentified.
However,Androidisnotalwaysright,anditrestoreseverythingasyouwish,soifActivityisimportanttomaintaincertainbehavior,ideallyyoushouldnotrelyonAndroidtodosoandensurethatinanyversion,yourviewwillmaintainthebehavior.
Then,youneedtooverridetheonSaveInstanceState
andonRestoreInstanceState
method,andtreatthedatasavedinonCreate
Example:
staticfinalStringSTATE_SCORE="playerScore";
static final String STATE_LEVEL = "playerLevel";
...
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
// Save the user's current game state
savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);
// Always call the superclass so it can save the view hierarchy state
super.onSaveInstanceState(savedInstanceState);
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); // Always call the superclass first
// Check whether we're recreating a previously destroyed instance
if (savedInstanceState != null) {
// Restore value of members from saved state
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
} else {
// Probably initialize members with default values for a new instance
}
...
}
public void onRestoreInstanceState(Bundle savedInstanceState) {
// Always call the superclass so it can restore the view hierarchy
super.onRestoreInstanceState(savedInstanceState);
// Restore state members from saved instance
mCurrentScore = savedInstanceState.getInt(STATE_SCORE);
mCurrentLevel = savedInstanceState.getInt(STATE_LEVEL);
}
Source Android Docs .