Являются ли onCreate и onRestoreInstanceState взаимоисключающими?
У меня есть пара вопросов относительно onRestoreInstanceState
и onSaveInstanceState
.
1), где эти методы соответствуют жизненному циклу активности? Я прочитал много документации, но нет четкой идеи, кроме широкого утверждения о том, что когда состояние активности должно быть сохранено
2) Существуют ли onCreate
и onRestoreInstanceState
взаимоисключающие?
3) называется onRestoreInstanceState
, когда действие уничтожается? что это значит? активность всегда уничтожается, за исключением сценариев, когда другая активность плавает поверх текущего.
4) onRestoreInstanceState
, по-видимому, вызывается только из инструментов в желе bean. Разве это больше не относится к жизненному циклу деятельности?
Ответы
Ответ 1
где эти методы соответствуют жизненному циклу активности?
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 от батареи. Таким образом, вы хотите предоставить крючки в lifecyle приложения, чтобы приложение могло чисто сохранять и восстанавливать свое состояние между остановками или потерять фокус, в то же время делая его полностью прозрачным для пользователя.
onRestoreInstanceState, по-видимому, вызывается только из инструментария в желе bean. Разве это больше не относится к жизненному циклу деятельности?
Я не понимаю этот вопрос. Вы можете перефразировать его?
Ответ 2
1), где эти методы соответствуют жизненному циклу активности?
из документации разработчика.
onSaveInstanceState (Bundle outState)
Этот метод вызывается до того, как действие может быть убито, так что, когда он вернется через некоторое время в будущем, он сможет восстановить свое состояние. Например, если активность B запускается перед активностью A, и в какой-то момент активность A убивается для восстановления ресурсов, активность A будет иметь возможность сохранить текущее состояние своего пользовательского интерфейса с помощью этого метода, чтобы при возврате пользователя к активности A состояние пользовательского интерфейса может быть восстановлено через onCreate (Bundle) или onRestoreInstanceState (Bundle).
Стандартная реализация onSaveInstanceState() позаботится о сохранении данных, связанных с каждым n каждым представлением, имеющим идентификатор.
При вызове этот метод будет выполняться до onStop(). Нет никаких гарантий относительно того, произойдет ли это до или после onPause().
onRestoreInstanceState (Bundle savedInstanceState)
Этот метод вызывается после onStart(), когда операция повторно инициализируется из ранее сохраненного состояния
3) является onRestoreInstanceState, вызываемым при уничтожении активности? что это значит? активность всегда уничтожается, за исключением сценариев когда другая активность плавает поверх тока.
Этот метод вызывается после onStart(), когда активность повторно инициализируется из ранее сохраненного состояния, указанного здесь в сохраненном состоянииString
(который представляет собой объект пакета, содержащий данные, сохраненные в onSaveInstanceState (Bundle)).
Большинство реализаций просто будут использовать onCreate (Bundle) для восстановления своего состояния, но иногда это удобно делать после завершения всей инициализации или разрешать подклассам решать, использовать ли вашу реализацию по умолчанию. По умолчанию реализация этого метода выполняет восстановление любого состояния представления, которое ранее было заморожено onSaveInstanceState (Bundle).
4) onRestoreInstanceState, по-видимому, вызывается только из аппаратура в желе bean. Это больше не относится к деятельности Жизненный цикл?
Нет. onRestoreInstanceState существует с API уровня 1. И его еще часть нового Jelly Bean API.
Ответ 3
-
Если ваша активность убита, например, вы запустили еще одно действие, а система на низком уровне ресурсов, необходимых для ее уничтожения, вы можете использовать onSaveInstanceState для сохранения состояния и восстановления.
/li > -
Не обязательно. onCreate вызывается перед onStart, но onRestoreInstanceState вызывается после, так что это зависит от того, чего вы пытаетесь достичь.
-
Вы имеете в виду onSaveInstanceState. Ну, это называется, когда активность убита, как в пункте 1 выше
-
Извините... Я не знаю, я не пробовал это на Jellybean