Действительно, как работает 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();
    }
}
Другие вопросы по тегам