Действительно, как работает onRestoreInstanceState()?
Мне нужна ваша помощь. Я делаю заявку, и я использую методы onSaveInstanceState()
а также onRestoreInstanceState()
, но второй метод не работает.
Я вижу, как программа обращается к onSaveinstancestate() при нажатии кнопки home, но когда я возвращаюсь в приложение, код не вызывает onRestoreInstanceState()
или же onCreate()
,
В результате приложение запускается с нуля. Я не знаю причину... ты можешь мне помочь?
Это мой код:
public class MainActivity extends ActionBarActivity {
MyView myView;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
myView = new MyView(this);
setContentView(myView);
if (savedInstanceState != null) {
myView .SetScore(savedInstanceState.getInt("Id"));
myView .SetNivel(savedInstanceState.getInt("Valor"));
}
}
.....
@Override
protected void onRestart(){
super.onRestart();
myView = new MyView(this);
setContentView(myView );
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState){
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null) {
myView.SetScore(savedInstanceState.getInt("Id"));
myView.SetNivel(savedInstanceState.getInt("Valor"));
}
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState){
savedInstanceState.putInt("Score",myView.GetId());
savedInstanceState.putInt("Nivel",muView.GetValor());
super.onSaveInstanceState(savedInstanceState);
}
}
3 ответа
Когда система начинает останавливать вашу активность, она вызывает метод onSaveInstanceState(), чтобы вы могли указать дополнительные данные о состоянии, которые вы хотите сохранить в случае необходимости воссоздания экземпляра Activity. Если действие уничтожено и тот же экземпляр должен быть воссоздан, система передает данные о состоянии, определенные как методу onCreate(), так и методу onRestoreInstanceState().
Вы можете проверить это https://developer.android.com/training/basics/activity-lifecycle/recreating.html
Вы можете увидеть, что происходит с тостом внутри вашего метода.
И проверьте это /questions/16119293/onrestoreinstancestate-ne-vyizyivaetsya-pri-probuzhdenii-ekrana/16119311#16119311
onRestoreInstanceState(...)
будет вызываться только в том случае, если действие было уничтожено, пока оно находилось в фоновом режиме. Вы можете заставить это произойти, если включите опцию "не сохранять действия".
Но это не объясняет, почему ваше приложение перезапускается с нуля. Вы уверены, что восстанавливаете данные правильно? Добавьте немного входа в систему onRestoreInstanceState(...)
чтобы убедиться, что его вызывают и делают правильные вещи. И ты уверен, что не звонишь finish()
где вы не должны быть, как onPause()
?
Попробуйте использовать фрагмент с setRetainInstance(true).
отредактированный
Объявите весь ваш пользовательский интерфейс во фрагменте ( http://developer.android.com/guide/components/fragments.html) так же, как вы делаете это в Activity.
public static class ExampleFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup Bundle savedInstanceState) {
setRetainInstance(true);
return new MyView(getActivity());
}
}
public static class MainActivity extends ActionBarActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
getSupportFragmentManager().beginTransaction().add(new ExampleFragment(), R.id.layout_where_you_want_to_display_fragment).commit();
}
}