Finish () против startActivity ()

Согласно документации Android, finish() делает именно то, что делает кнопка «назад». Так что в основном onStop() вызывается, когда я вызываю finish().

Я попытался переопределить onStateSaveInstance(), чтобы сохранить текущее состояние, но он никогда не вызывается. Однако, если я перейду к предыдущей активности, создав новый Intent и используя startActivity(), будет вызван метод onStateSaveInstance(). Есть ли причина для этого?


person Florin    schedule 06.09.2017    source источник
comment
finish() does exactly what the "back" button does. за исключением случаев, когда ваш super.onBackPressed() еще не закрывает действие, а делегирует его обратному стеку фрагментов и т. д.   -  person EpicPandaForce    schedule 06.09.2017
comment
I tried to override onStateSaveInstance() to save the current state, but it is never called., то есть для изменений конфигурации и смерти процесса, а не для того, когда ваша активность фактически завершается.   -  person EpicPandaForce    schedule 06.09.2017


Ответы (1)


Так что в основном onStop() вызывается, когда я вызываю finish().

Не обязательно. onStop() вызывается, когда ваша активность больше не видна. finish() запускает вызов onStop() только в том случае, если активность видна при вызове finish().

Я пытался переопределить onStateSaveInstance(), чтобы сохранить текущее состояние, но он никогда не вызывается.

Правильный. Вы разрушаете деятельность. Состояние экземпляра для сохранения отсутствует.

Однако, если я перейду к предыдущей активности, создав новый Intent и используя startActivity(), будет вызван метод onStateSaveInstance()

Не обязательно. Это будет зависеть от Intent флагов, android:launchMode в манифесте и т.д.

Есть ли причина для этого?

onSaveInstanceState() не будет вызываться при уничтожении вашей активности. Нет состояния экземпляра, которое нужно сохранить, так как экземпляр уходит.

person CommonsWare    schedule 06.09.2017
comment
Я знаю, что нет гарантии, что активность будет уничтожена, с этим справляется операционная система. Это исключение? - person Florin; 06.09.2017
comment
@Florin: что является исключением из чего? - person CommonsWare; 06.09.2017
comment
Вы сказали, что onSaveInstanceState() не вызывается, потому что активность уничтожается. Но я знаю, что операционная система обрабатывает такие вещи, и нет никакой гарантии, что действие больше не существует. - person Florin; 06.09.2017
comment
@Florin: если вы позвоните finish(), активность будет уничтожена. Я не могу придумать сценарий, в котором вызов finish() не уничтожает активность. - person CommonsWare; 06.09.2017