Разница между 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 ())

и

  1. в чем разница между двумя?

  2. в каких ситуациях я могу использовать 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