Уж чтобы до конца добить данную тему рассмотрим еще один параметр stateNotNeeded.
В альма-матер про него можно почитать тут и тут.
Общий смысл этого параметра сводиться к тому что данный параметр установленный в состояние true может отменить вызов метода onSaveInstanceState(), то есть Активность каждый раз, когда выходит на передний план будет запускаться как будто впервые, то есть не будет сохранять своего состояния и когда будет вызываться метод onCreate(), то туда вместо объекта Bundle будет передаваться null.
Но ключевое слово тут МОЖЕТ То есть может отменить вызов а может и нет
Когда я пробовал экспериментировать с этим параметром, то у меня он, почему то, не работал. Стал рыскать по сети в чем дело. Нашел вот это
На всякий случай приведу полный диалог, забавный немного
_______________________________________________
Hi,
SDK reference says "If this attribute is set to "true",
onSaveInstanceState() may not be called and onCreate() will be passed
null instead of the Bundle — just as it was when the activity started
for the first time."
I verified it is not true. No matter what value I set stateNotNeeded,
onSaveInstanceState() always gets called!
Is this a bug?
James
_________________________________________________
The documentation says "**may** not be called" (emphasis mine.) It
does not say that the method **will** not be called.
Так или иначе я вывел приложение АР0003 на очередной этап эволюции добавив Активность J и установив для нее параметр stateNotNeeded="true". В Активность В добавил кнопку запуска Активности J.
И так запускаем приложение АР0003
Стартуем Активность В
Теперь жмем Start Activity J и смотрим логи
То есть мы видим что когда Активность J стартовала впервые, то savedInstance получил значение NULL, так как не было сохраненного состояния. По идее параметр stateNotNeeded должен запрещать сохранять состояние Активности, но такого почему-то не происходит. По крайней мере у меня не получилось.
Теперь введем любой текст в поле
И поворачиваем устройство, чтобы произошло уничтожение и создание Активности J
Как видим Активность J нам сообщает, что она была запущена впервые, но текст который мы ввели сохранился. Это означает что сработал метод onSaveInstanceState() чего при параметре stateNotNeeded быть не должно.
Посмотрим логи
Тут мы видим еще раз, что когда Активность J создавалась в первый раз, то естественно объекта Bundle еще не было и поэтому в метод onCreate() был передан null. Когда же мы повернули экран, то таки сработал метод onSaveInstanceState() и поэтому произошло сохранение нашего текста в поле, чего по идее, при этом ключе быть не должно.
Но как написано в описании в алма-матер, что метод onSaveInstanceState() может быть не вызван.
Но в моих экспериментах он почему-то все время вызывался, и как видно из моего поиска такое поведение не только у меня.
Так или иначе я просто упомянул этот параметр, дабы он был.
Комментариев нет:
Отправить комментарий