Являются ли onCreate и onRestoreInstanceState взаимоисключающими?

У меня есть пара вопросов относительно onRestoreInstanceState и onSaveInstanceState .

1) где эти методы соответствуют жизненному циклу активности? Я прочитал много документации, но нет четкой идеи, кроме широкого утверждения о том, что когда состояние активности должно быть сохранено

2) Являются ли onCreate и onRestoreInstanceState взаимоисключающими?

3) является onRestoreInstanceState вызываемым при уничтожении активности? что это значит? Действие всегда уничтожается, за исключением сценариев, когда другое действие плавает поверх текущего.

4) onRestoreInstanceState видимому, onRestoreInstanceState только из инструментов в желе. Разве это больше не относится к жизненному циклу деятельности?

Solutions Collecting From Web of "Являются ли onCreate и onRestoreInstanceState взаимоисключающими?"

Где эти методы соответствуют жизненному циклу активности?

OnSaveInstanceState вызывается непосредственно перед тем, как ваша активность будет убита или перезапущена (например, b / c из-за давления памяти или изменения конфигурации). Обратите внимание, что это отличается от onPause, который вызывается, когда ваша активность теряет фокус (например, вы переходите к другому действию).

Обычно onSaveInstanceState вызывается после onPause, но до onStop, но не всегда. Например, если вы нажмете назад, то действие будет уничтожено (например, call finish ()), и нет необходимости сохранять состояние, поэтому onSaveInstanceState не вызывается. Так почему бы не просто сохранить состояние в onPause? Просто потому, что деятельность теряет фокус, это не значит, что он был убит. Он все еще в памяти. В основном вы не хотите сохранять состояние каждый раз, когда вы приостановлены, а скорее, когда вы приостановлены и собираетесь стать невидимыми (то есть переходите с переднего плана на задний план).

Итак, что вы должны делать в onPause? В идеале вы должны выделять ресурсы, которые истощают ваш аккумулятор, например, сетевые подключения, отключать гео или акселерометр, приостанавливать видео (все это зависит от вашего приложения). И восстановите эти ресурсы в onResume, который, как вы могли догадаться, вызывается, когда ваша активность фокусируется.

Являются ли onCreate и onRestoreInstanceState взаимоисключающими?

OnRestoreInstanceState избыточен, потому что вы можете легко восстановить состояние в onCreate.

Сказав, что вот что говорит официальный документ для onRestoreInstanceState:

Большинство реализаций просто используют onCreate (Bundle) для восстановления своего состояния, но иногда удобно делать это здесь после завершения инициализации или разрешать подклассам решать, использовать ли вашу реализацию по умолчанию .

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

Is onRestoreInstanceState вызывается, когда действие уничтожается? что это значит?

Частично это было ответино на 1. Да, onRestore вызывается, когда система собирается уничтожить вашу деятельность. Система будет уничтожать вашу деятельность, когда она находится под давлением памяти, или пользователь явно закрывает приложение (например, удаление удаленных объектов из повторов в навигационной панели) или происходит изменение конфигурации (например, ландшафт для портрета).

Почему Android разработан таким образом (в отличие от настольных приложений)? Потому что на мобильных системах управление ресурсами – острая проблема b / c работы от батареи. Таким образом, вы хотите обеспечить привязку к жизненному циклу приложения, чтобы приложение могло чисто сохранять и восстанавливать свое состояние между остановками или потерей фокуса, в то же время делая его полностью прозрачным для пользователя.

OnRestoreInstanceState, по-видимому, вызывается только из инструментов в желе. Разве это больше не относится к жизненному циклу деятельности?

Я не понимаю этого вопроса. Вы можете перефразировать его?

1) где эти методы соответствуют жизненному циклу активности?

Из документов разработчика.

OnSaveInstanceState (Bundle outState)

Этот метод вызывается до того, как активность может быть убита, так что, когда она вернется через некоторое время в будущем, она сможет восстановить свое состояние. Например, если активность B запускается перед активностью A, и в какой-то момент активность A уничтожается для восстановления ресурсов, активность A будет иметь возможность сохранить текущее состояние своего пользовательского интерфейса с помощью этого метода, чтобы при возврате пользователя К активности A состояние пользовательского интерфейса может быть восстановлено через onCreate (Bundle) или onRestoreInstanceState (Bundle).

По умолчанию реализация onSaveInstanceState () берет на себя сохранение данных, связанных с каждым n каждым представлением, имеющим идентификатор.

Если вызывается , этот метод будет выполняться до onStop (). Нет никаких гарантий относительно того, произойдет ли это до или после onPause () .

OnRestoreInstanceState (Bundle savedInstanceState)

Этот метод вызывается после onStart (), когда активность повторно инициализируется из ранее сохраненного состояния

3) является onRestoreInstanceState, вызываемым при уничтожении активности? что это значит? Действие всегда уничтожается, за исключением сценариев, когда другое действие плавает поверх текущего.

Этот метод вызывается после onStart (), когда активность повторно инициализируется из ранее сохраненного состояния, указанного здесь в файле savedInstanceState (который представляет собой объект пакета, содержащий данные, сохраненные в onSaveInstanceState (Bundle)).

Большинство реализаций просто используют onCreate (Bundle) для восстановления своего состояния, но иногда удобно делать это здесь после завершения инициализации или разрешать подклассам решать, использовать ли вашу реализацию по умолчанию. По умолчанию реализация этого метода выполняет восстановление любого состояния представления, которое ранее было заморожено onSaveInstanceState (Bundle).

4) onRestoreInstanceState, по-видимому, вызывается только из инструментов в желе. Разве это больше не относится к жизненному циклу деятельности?

Нет. OnRestoreInstanceState существует с API уровня 1. И его еще часть нового Jelly Bean API.

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

  2. Не обязательно. OnCreate вызывается перед onStart, но onRestoreInstanceState вызывается после, так что это зависит от того, чего вы пытаетесь достичь

  3. Вы имеете в виду onSaveInstanceState. Ну, это называется, когда активность убита, как в пункте 1 выше

  4. Извините … Я не знаю, я не пробовал это на Jellybean