Подтвердить что ты не робот

Когда вызывается onRestoreInstanceState?

Извините за мое непонимание, но я новичок в развитии Android.

У меня есть приложение с активностью A и активностью B в нем, и я перехожу от активности A к активности B. Когда я покинул активность A, был вызван метод onSaveInstanceState, но когда я вернулся к активности A (из активность B в том же приложении), пакет в методе onCreate был нулевым.

Что я могу сделать, чтобы сохранить активность Предыдущее состояние? Я хочу хранить данные только для срока службы приложения.

Может кто-нибудь мне помочь?

Вот мой код для Activity A:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null)
    {
        Log.v("Main", savedInstanceState.getString("test"));
    }
    else
    {
        Log.v("Main", "old instance");
    }
}  

@Override
public void onSaveInstanceState(Bundle savedInstanceState) 
{
    Log.v("Main", "save instance");

    savedInstanceState.putString("test", "my test string");

    super.onSaveInstanceState(savedInstanceState);
}


public void buttonClick(View view)
{
    Intent intent = new Intent(this, Activity2.class);
    startActivity(intent);
}

Вот мой код для Activity B, когда я нажимаю кнопку, чтобы вернуться к активности A:

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
4b9b3361

Ответ 1

Сохранение и восстановление состояния предназначено для сохранения текущих временных данных, которые устарели, когда пользователь выходит из приложения. Когда вы сворачиваете или покидаете действие, открывая следующий, он может быть убит системой из-за нехватки ресурсов и перезапущен с помощью savedInstanceState, когда вы вернетесь к нему. Поэтому используйте onSaveInstanceState() только для сохранения данных сеанса с минимальным восстановлением.

Итак, если вы начнете новую активность перед собой и вернетесь к предыдущей (то, что вы пытаетесь сделать), активность A может не быть убита (просто остановлена) и перезапущена без разрушения. Вы можете принудительно убить его и восстановить, установив Don't keep activities в меню параметров разработчика.

Если вы вызываете finish() или удаляете Activity из недавнего списка задач, savedInstanceState не будет передан в onCreate(), поскольку задача была очищена.

Если значение должно быть постоянным, рассмотрите возможность использования SharedPreferences.

Ответ 3

Это происходит потому, что вы плавно переходите. Если вы использовали навигацию по умолчанию по умолчанию, ваш onCreate получит переданный пакет.

Чтобы обойти эту проблему, я предлагаю вам сохранить ваше состояние в общих настройках, а также создать резервную копию. Когда пакет равен null, восстановите его из общих настроек.

Ответ 4

После onStart(), который после onCreate()

Ответ 5

В этом случае я использовал флаг и SharedPreferences. Это должно работать, и когда вы меняете ориентацию экрана.