Почему я должен переопределить onSavedInstanceState для получения состояния экземпляра в Android?

В onCreate(Bundle saveInstanceState) уже есть super.onCreate(savedInstanceState).

API говорит, что восстанавливает состояния при создании активности после уничтожения.

Но мне нужно переопределить onSavedInstanceState(Bundle outState) для восстановления определенных состояний.

Почему?

Какая информация сохраняется в saveInstanceState с помощью методов onCreate() и onSavedInstanceState()?

Я весьма озадачен!


person user3398676    schedule 30.03.2014    source источник
comment
См. stackoverflow.com/questions/6525698/ за хорошее объяснение того, что вы делаете в функциях, когда переопределяете их.   -  person Christian Garbin    schedule 30.03.2014


Ответы (2)


По умолчанию, когда ваше устройство меняет конфигурацию (например, устройства меняются, вы меняете языковые настройки и т. д.), ваш передний план Activity создается заново, и все ваши данные об активности теряются. Например, если у вас есть переменная-член mVariable, которой было присвоено какое-то значение, после изменения конфигурации вы потеряете ее значение. Вот почему вам нужно сохранить важные данные в savedInstanceState и повторно инициализировать его из метода onCreate(). Вы просто проверяете, не является ли savedInstanceState null, и если это так, вы инициализируете свои значения из saveInstance, иначе - инициализируете значениями по умолчанию.

Дополнительная литература: http://developer.android.com/training/basics/activity-lifecycle/recreating.html

person agamov    schedule 30.03.2014

onSaveInstanceState() вызывается до того, как ваша активность будет приостановлена. Таким образом, любая информация, которая ему понадобится после потенциального уничтожения, может быть извлечена из сохраненного пакета. Bundle — это контейнер для всей информации, которую вы хотите сохранить. Вы используете функции put* для вставки в него данных. Чтобы получить данные обратно, используйте функции get* точно так же, как и функции put*. Данные хранятся в виде пары имя-значение. У этого элемента нет конкретного использования, вы можете использовать его в любом случае (сохраните имя, номер или что-то еще, что вам нужно, когда вы снова откроете приложение)

person MatteoM    schedule 30.03.2014