Страница 1 из 1
Зачем нужен метод onSaveInstanceState, если...
Добавлено: 05 июн 2013, 06:58
Dmitry100
...он вызывается не гарантированно, и, чтобы организовать сохранение состояния придется делать свой аналог в onPause
Практическая задача: в onPause проверили и обнаружили что висит диалог прогресса, надо его закрыть и в onResume восстановить, как?
учитывая что onResume может прийти и после пересоздания активности, значит, единственный выход - завести синглтон для хранения Bundle, в onResume получили ссылку на него, а там HashMap<String, Bundle>, где String - имя класса активности, так что ли?
Просто сейчас обнаружил что даже явный вызов finish() не приводит к вызову onSaveInstanceState.
Re: Зачем нужен метод onSaveInstanceState, если...
Добавлено: 05 июн 2013, 09:12
klblk
Если я правильно помню onSaveInstanceState срабатывает перед вызовом onStop. Т.е. onPause ему вообще побоку. Для решения этой задачи я бы сделал bool переменную, в onPause, если виден диалог, делаю её true, в onResume проверяем её и если true строим диалог. Сохраняем эту переменную в onSaveInstanceState.
onSaveInstanceState срабатывает только при "неявном" разрушении активити (при повороте экрана или убийстве процесса системой). Если ты явно вызываешь finish он не срабатывает.
Re: Зачем нужен метод onSaveInstanceState, если...
Добавлено: 05 июн 2013, 09:41
Dmitry100
да, похоже зря напугался, а то уже собрался ударно все активности менять,
вот активность, показали ее, что-то там запустилось, анимация кнопок, прогрессбар, разные пользовательские изменения,
если идет поворот, то срабатывает onSaveInstanceState, там сохраняем состояние (а закрываем все диалоги и анимации в onPause конечно)
если выходим по back (или явному finish()) то состояние сохранять не нужно, так получается по логике приложения?
и если другая активность запускается, то тоже сработает onSaveInstanceState
Re: Зачем нужен метод onSaveInstanceState, если...
Добавлено: 05 июн 2013, 10:26
klblk
Я тут вспомнил, вроде бы поднимался уже вопрос связанный с Lifecycle.
исходя из урока:
http://startandroid.ru/ru/uroki/vse-uro ... krana.html
onSaveInstanceState вызывается перед onPause. Я проверил у себя на устройстве (Samsung Galaxy Nexus) onSaveInstanceState срабатывает после onPause, но перед onStop. Странно, это... но думаю в данной задаче это не должно помешать.