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


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

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

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

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

Вот мой код для действия 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);
}

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

public void onBack(View view)
{
    NavUtils.navigateUpFromSameTask(this);
}
5 34

5 ответов:

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

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

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

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

Чтобы ответить на ваш вопрос, взгляните на Android doc: https://developer.android.com/reference/android/app/Activity.html#onRestoreInstanceState(android.os.Bundle)

Он говорит, что onRestoreInstanceState вызывается после метода onStart () в жизненном цикле действия.

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

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

После onStart (), который находится после onCreate ()

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