web-dev-qa-db-fra.com

Différence entre finish () et System.exit (0)

Je parle de programmation sous Android.

Au début, je pensais que finish() ferme l'activité en cours et reviens à la précédente dans la pile d'activité, et System.exit(0) ferme la application entière.

Mais je me trompais. J'ai fait une petite expérience et compris que Les deux ne termineront que l'activité en cours .


Les seules différences que j'ai pu remarquer sont que, dans Android 2.3.3

  • Le ActivityResult est propagé vers onActivityResult() en utilisant finish(). Alors que onActivityResult() n'est pas appelé pour System.exit(0).

Mais dans Android 4.2.2, onActivityResult () est appelé pour les deux! Et Intent était nul pour exit (). (J'ai testé uniquement sur ces 2 appareils)

  • Il y a un décalage dans l'utilisation de exit () alors que finish() est plus rapide . (Il semble que plus d'opérations d'arrière-plan soient présentes dans exit ( ))

Alors,

  1. quelle est la différence entre deux?

  2. Dans quelles situations, je peux utiliser exit ()?

Je crois qu'il y a quelque chose de plus qui me manque entre les deux méthodes. J'espère que quelqu'un pourra m'expliquer davantage et me corriger.

Merci

MODIFIER SUR DEMANDE:

Créez une Android avec 2 activités. Appelez la deuxième activité à partir de l'activité du lanceur en utilisant l'intention. Maintenant, à l'intérieur de la deuxième activité, lors d'un clic sur le bouton, appelez System.exit(0);. "The VM arrête l'exécution et le programme se fermera. "???? (selon documentation )

J'y vois la première activité. Pourquoi? (Vous êtes invités à prouver que je me trompe/j'avais raison)

35
Nizam

En fait, il n'y a pas de différence si vous n'avez qu'une seule activité. Cependant, si vous avez plusieurs activités sur la pile, alors:

  • finish () - termine l'activité d'où elle est appelée et vous voyez l'activité précédente.
  • System.exit (0) - redémarre l'application avec une activité de moins sur la pile. Donc, si vous avez appelé ActivityB à partir d'ActivityA et que System.exit(0) est appelée dans ActivityB, alors l'application sera supprimée et démarrée immédiatement avec une seule activité ActivityA
22
Ayaz Alifov

Selon Android Developer -

finish()

Appelez cela lorsque votre activité est terminée et doit être fermée. Le ActivityResult est propagé à celui qui vous a lancé via onActivityResult ().

System.exit(0)

Le VM arrête l'exécution et le programme se fermera.

13
mjosh

Selon la documentation, le programme se fermera.
Mais cela semble être un bug dans la documentation. Dans le cas d'un programme Java, c'est correct. Mais en venant sur Android, vous verrez l'activité précédente de la pile.

Depuis Android se fait en utilisant Java, la plupart de la documentation est la même que pour Java).
D'après la documentation,

System.exit (0)
Le VM arrête l'exécution et le programme se fermera.

Pour Android, nous devons remplacer le mot 'programme' par quelque chose d'autre. Peut être Activité ou Contexte .

9
user3141926

Sa réponse Qada est correcte après mes tests.

l'arrivée clôturera cette activité et reviendra au précédent.

mais exit fermera également l'activité en cours et videra tous les activité en gel et recommencera l'activité précédente

En fait, il n'y a pas de différence si vous n'avez qu'une seule activité. Cependant, si vous avez plusieurs activités sur la pile, alors:

finish () - termine l'activité d'où elle est appelée et vous voyez l'activité précédente. System.exit (0) - redémarre l'application avec une activité de moins sur la pile. Donc, si vous avez appelé ActivityB à partir d'ActivityA et que System.exit (0) est appelé dans ActivityB, alors l'application sera supprimée et démarrée immédiatement avec une seule activité ActivityA

3
nyconing