Разница между finish () и System.выход(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 (). (Я тестировал только в этих 2 устройствах)
- при использовании exit() существует временная задержка, тогда как
finish()
is быстрее.(кажется, что больше фоновых операций есть в exit ())
и
в чем разница между двумя?
в каких ситуациях я могу использовать exit()?
Я считаю, что есть что-то еще, что мне не хватает между этими двумя методами. Надеюсь, кто-нибудь объяснит больше и поправит меня.
спасибо
РЕДАКТИРОВАТЬ ПО ЗАПРОСУ:
сделайте Android-приложение с 2-мя видами деятельности. Вызов второй Действие из действия запуска с использованием Intent. Теперь, внутри второго действия, после нажатия кнопки, вызовите System.exit(0);
.
"VM останавливает дальнейшее выполнение, и программа выйдет."????(согласно документация)
Я вижу первую активность там. Почему? (Вы можете доказать, что я неправ/ я был прав)
4 ответов
на самом деле нет никакой разницы, если у вас есть только одно действие. Однако, если у вас есть несколько действий в стеке, то:
- finish() - завершает действие, из которого оно вызывается, и вы видите предыдущее действие.
согласно разработчику android -
finish()
вызовите это, когда ваша деятельность будет завершена и должна быть закрыта. Этот ActivityResult возвращается к тому, кто запустил вас через onActivityResult ().
System.exit(0)
VM останавливает дальнейшее выполнение, и программа выйдет.
согласно документации, программа выйдет.
Но это кажется ошибкой в документации. В случае Java-программы, это правильно. Но, перейдя на Android, вы увидите предыдущую активность из стека.
поскольку кодирование Android выполняется с использованием java-кодирования, большая часть документации такая же, как и для java.
Из документации,
'' С чем-то еще. Может быть активность или контекста.
Sa Qada ответ правильный после моего тестирования.
finish закроет это действие и вернется к prevous.
но выход закроет текущую активность и опустошит все активность в замораживании и начать снова предыдущее действие
на самом деле нет никакой разницы, если у вас есть только одно действие. Однако, если у вас есть несколько действий в стеке, то:
finish () - завершает действие, где оно называется и вы видите предыдущая деятельность. Система.exit (0) - перезапуск приложения с помощью одного меньше активности в стеке. Итак, если вы позвонили ActivityB из ActivityA и системы.выход (0) вызывается в ActivityB, затем приложение будет убито и запущено сразу только с одним деятельность ActivityA