Подтвердить что ты не робот

Разница между финишем() и 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() есть больше фоновых операций

Итак,

  • какая разница между двумя?

  • В каких ситуациях я могу использовать exit()?

Я считаю, что есть что-то большее, чего я не вижу между этими двумя методами. Надеюсь, кто-нибудь может объяснить и исправить меня.

Спасибо

ИЗМЕНИТЬ ЗАПРОС:

Сделайте приложение для Android с 2 действиями. Вызовите вторую активность из активности Launcher, используя Intent. Теперь, во втором действии, нажав кнопку, вызовите System.exit(0);. "VM останавливает дальнейшее выполнение, и программа выйдет".???? (согласно документации)

Я вижу первую активность там. Зачем? (Вы можете доказать, что я ошибаюсь/я был прав)

4b9b3361

Ответ 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