Разница между финишем() и System.exit(0)
Я говорю о программировании в android.
В первые дни я думал, что finish()
закрывает текущую активность и возвращается к предыдущему в стеке действия, а System.exit(0)
закрывает все приложение.
Но я был неправ.
Я сделал небольшой эксперимент и понял, что Оба завершат только текущую активность.
Единственные различия, которые я мог заметить, это то, что в Android 2.3.3
- ActivityResult распространяется на
onActivityResult()
с помощью finish()
. В то время как onActivityResult()
не вызывается для System.exit(0)
.
Но в Android 4.2.2 вызывается onActivityResult() для обоих! и Intent было null для выхода().
(Я тестировал только в этих двух устройствах)
- При использовании exit() существует временная задержка, тогда как
finish()
быстрее. (похоже, что в exit() есть больше фоновых операций
Итак,
Я считаю, что есть что-то большее, чего я не вижу между этими двумя методами.
Надеюсь, кто-нибудь может объяснить и исправить меня.
Спасибо
ИЗМЕНИТЬ ЗАПРОС:
Сделайте приложение для Android с 2 действиями. Вызовите вторую активность из активности Launcher, используя Intent. Теперь, во втором действии, нажав кнопку, вызовите System.exit(0);
.
"VM останавливает дальнейшее выполнение, и программа выйдет".???? (согласно документации)
Я вижу первую активность там. Зачем?
(Вы можете доказать, что я ошибаюсь/я был прав)
Ответы
Ответ 1
На самом деле нет никакой разницы, если у вас есть только одно действие. Однако, если у вас есть несколько действий в стеке, то:
- finish() - завершает действие, из которого он вызывается, и вы видите предыдущее действие.
- System.exit(0) - перезапускает приложение с меньшим количеством действий в стеке. Итак, если вы вызвали ActivityB из ActivityA, а
System.exit(0)
вызывается в ActivityB, тогда приложение будет убито и немедленно запущено только с одним действием ActivityA
Ответ 2
В соответствии с разработчиком Android -
finish()
Вызовите это, когда ваша деятельность будет завершена и должна быть закрыта. ActivityResult распространяется на тех, кто запустил вас через onActivityResult().
System.exit(0)
VM останавливает дальнейшее выполнение, и программа выйдет.
Ответ 3
В соответствии с документацией программа выйдет.
Но это похоже на ошибку в документации. В случае java-программы это правильно. Но, придя в Android, вы увидите предыдущую активность из стека.
Поскольку Android-кодирование выполняется с использованием java-кодирования, большая часть документации такая же, как и для java.
Из документации,
System.exit(0)
VM останавливает дальнейшее выполнение, и программа выйдет.
Для аспект Android мы должны заменить слово 'program' на что-то еще. Может быть Активность или контекст.
Ответ 4
Ответ Sa Qada правильный после моего тестирования.
конец закрывает эту активность и возвращается к предыдущему.
но exit также закроет текущую активность и опустит все активность в режиме замораживания и начнет повторную предыдущую активность
На самом деле нет никакой разницы, если у вас есть только одно действие. Однако, если у вас есть несколько действий в стеке, то:
finish() - завершает действие, из которого он вызван, и вы видите предыдущей деятельности. System.exit(0) - перезапускает приложение с помощью одного меньше активности в стеке. Итак, если вы вызвали ActivityB из ActivityA и System.exit(0) вызывается в ActivityB, тогда приложение будет убито и немедленно запущено только с одним активность ActivityA