Я новичок в андроиде, и я прочитал книгу для новичков, в которой говорится, что onSaveInstanceState(Bundle)
будет называться до того, как система восстановит ваш Activity
. Я попробовал это на некоторых тестовых кодах и нашел его неправильным. Я обнаружил, что onSaveInstanceState(Bundle)
был вызван каждый раз после вызова onPause()
. И это не имеет никакого отношения к рекуперации системы. Я не очень уверен в этом, так вот в чем вопрос: когда onSaveInstanceState(Bundle)
называется на самом деле?Вызывается метод onSaveInstanceState (Bundle) после onPause()?
ответ
Кроме того, метод
onSaveInstanceState(Bundle)
вызывается перед размещением активности в таком фоне состояния, что позволяет сохранить прочь любое динамическое состояние экземпляра в вашей деятельности в данной Bundle, чтобы быть позже получена вonCreate(Bundle)
, если деятельность необходимо воссоздать. Дополнительную информацию о том, как жизненный цикл процесса привязан к действиям, которые он размещает, можно найти в разделе «Процесс жизненного цикла». Обратите внимание, что важно сохранить постоянные данные вonPause()
вместоonSaveInstanceState(Bundle)
, потому что последний не является частью обратных вызовов жизненного цикла, поэтому не будет вызываться в каждой ситуации, как описано в его документации.
Да onPause()
вызывается до onSaveInstanceState(Bundle)
. Но onPause()
гарантированно будет вызван в качестве своей части деятельности life cycle
Обычно, когда ваша деятельность будет создан заново, например, при изменении ориентации устройства, то onSaveInstanceState(Bundle)
вызывается, если вы не указали android:configChanges
тег в файле manifest.xml
.
Я не согласен с предыдущим ответом.
Согласно Documentation:
При вызове, этот метод будет происходить до OnStop(). Нет гарантии о том, произойдет ли это до или после onPause().
Как важное примечание, 'onSaveInstanceState()' может вызываться до 'onPause()'. Возможно, это связано с тем, что фрагмент (поддержка), который я использую, находится в 'ViewPager'. Надеюсь, это полезно для кого-то другого. – Sufian
- 1. Почему onSaveInstanceState вызывается после onPause
- 2. onPause вместо onSaveInstanceState
- 3. Метод onSaveInstanceState (Bundle) не определен
- 4. onDestroy() вызывается после onPause()
- 5. OnPause вызывается сразу после OnResume
- 6. onSaveInstanceState вызывается после фрагмента заменен
- 7. onSaveInstanceState и onPause изменить порядок?
- 8. onDetroy() вызывается после вызова onPause()
- 9. Android onSaveInstanceState Bundle
- 10. Когда onSaveInstanceState вызывается в фрагменте?
- 11. onSaveInstanceState (Bundle) только одно исполнение? ¿
- 12. onPause() & onSaveInstanceState() для созданного пользовательского интерфейса
- 13. onSaveInstanceState не вызывается в Фрагменте
- 14. Фрагмент onPause вызывается дважды
- 15. Добавить фрагмент после onPause
- 16. Метод кроме того onPause?
- 17. Почему в CODE Bundle и onSaveInstanceState Bundle разные фрагменты?
- 18. onSaveInstanceState вызывается дважды в Orientation Change
- 19. Android onPause вызывается при запуске приложения
- 20. Альтернативы совершению транзакции после onPause
- 21. Фрагмент OnResume() после OnPause()
- 22. Как использовать метод OnPause
- 23. Использование функций onPause() и onSaveInstanceState() для сохранения состояния;
- 24. android - данные хранятся в onPause, onStop или onSaveInstanceState
- 25. Android сохраняет ArrayList <CustomObject> onPause и onSaveInstanceState
- 26. FragmentActivity onSaveInstanceState не вызывался
- 27. Вызов функций openGL после onPause()
- 28. Передача элементов в метод onPause()
- 29. Android - восстановление активности с onSaveInstanceState null
- 30. onSaveInstanceState не получает вызов после поворота экрана
Вы должны прочитать о жизненном цикле деятельности. Вот диаграмма: http://i.stack.imgur.com/EVuKo.png – dazito
Спасибо, дазито. Я думаю, что я просто понял вашу картину: 'onPause()' сам должен быть вызван до того, как система будет убивать Activity, поэтому поэтому 'onSaveInstanceState (Bundle)' также обеспечивается. Но я заметил, что 'onStop()', безусловно, будет вызываться в течение меньшего времени, чем 'onPause()' за один жизненный цикл, а также 'onStop()' также будет вызван, прежде чем система убьет Activity. Итак, почему 'onSaveInstanceState (Bundle)' всегда соединяется с 'onPause()', но не 'onStop()'? Почему 'onSaveInstanceState (Bundle)' следует вызывать так много раз? Похоже, что это пустая трата ресурсов для системы. –
Поскольку у вас может быть другое действие, занимающее место (на экране) вашего текущего действия, поэтому вызывается onPause(). Из Android Docs: «Например, когда открывается полупрозрачная активность (например, одна в стиле диалога), предыдущая активность приостанавливается. Пока активность все еще частично видима, но в настоящее время это не активность в фокусе, она остается приостановленной. 'Http://developer.android.com/training/basics/activity-lifecycle/pausing.html Я рекомендую вам переопределить всю активность жизненные циклы и играть, чтобы вы могли приостановить/возобновить действие/остановить/уничтожить и т. д. – dazito