Зачем нужен метод onSaveInstanceState, если...

Activity Lifecycle, Saving Activity State, Managing Tasks, Intent, Intent Filter
Ответить
Dmitry100
Сообщения: 3
Зарегистрирован: 30 дек 2012, 06:30

Зачем нужен метод onSaveInstanceState, если...

Сообщение Dmitry100 » 05 июн 2013, 06:58

...он вызывается не гарантированно, и, чтобы организовать сохранение состояния придется делать свой аналог в onPause
Практическая задача: в onPause проверили и обнаружили что висит диалог прогресса, надо его закрыть и в onResume восстановить, как?
учитывая что onResume может прийти и после пересоздания активности, значит, единственный выход - завести синглтон для хранения Bundle, в onResume получили ссылку на него, а там HashMap<String, Bundle>, где String - имя класса активности, так что ли?
Просто сейчас обнаружил что даже явный вызов finish() не приводит к вызову onSaveInstanceState.

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Зачем нужен метод onSaveInstanceState, если...

Сообщение klblk » 05 июн 2013, 09:12

Если я правильно помню onSaveInstanceState срабатывает перед вызовом onStop. Т.е. onPause ему вообще побоку. Для решения этой задачи я бы сделал bool переменную, в onPause, если виден диалог, делаю её true, в onResume проверяем её и если true строим диалог. Сохраняем эту переменную в onSaveInstanceState.

onSaveInstanceState срабатывает только при "неявном" разрушении активити (при повороте экрана или убийстве процесса системой). Если ты явно вызываешь finish он не срабатывает.

Dmitry100
Сообщения: 3
Зарегистрирован: 30 дек 2012, 06:30

Re: Зачем нужен метод onSaveInstanceState, если...

Сообщение Dmitry100 » 05 июн 2013, 09:41

да, похоже зря напугался, а то уже собрался ударно все активности менять,
вот активность, показали ее, что-то там запустилось, анимация кнопок, прогрессбар, разные пользовательские изменения,
если идет поворот, то срабатывает onSaveInstanceState, там сохраняем состояние (а закрываем все диалоги и анимации в onPause конечно)
если выходим по back (или явному finish()) то состояние сохранять не нужно, так получается по логике приложения?
и если другая активность запускается, то тоже сработает onSaveInstanceState

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Зачем нужен метод onSaveInstanceState, если...

Сообщение klblk » 05 июн 2013, 10:26

Я тут вспомнил, вроде бы поднимался уже вопрос связанный с Lifecycle.
исходя из урока:
http://startandroid.ru/ru/uroki/vse-uro ... krana.html
onSaveInstanceState вызывается перед onPause. Я проверил у себя на устройстве (Samsung Galaxy Nexus) onSaveInstanceState срабатывает после onPause, но перед onStop. Странно, это... но думаю в данной задаче это не должно помешать.

Ответить