Comment Activity.finish () fonctionne-t-il sur Android?


Réponses:


123

Quitte-t-il immédiatement ou termine-t-il la fonction à partir de laquelle il a été appelé?

La méthode qui a appelé finish()s'exécutera jusqu'à la fin. L' finish()opération ne commencera même pas tant que vous n'aurez pas rendu le contrôle à Android.


3
Alors comment terminer une activité qui est appelée par StartAvtivityforResults () sans fin?
Ayush Pateria

@CommonsWare Comment pouvons-nous nous assurer que onStop est toujours appelé? Dans mon application, OnStop et onDestroy ne sont pas appelés dans certains cas et dans ces cas, l'activité de l'enfant prend trop de temps à se terminer et cela ressemble à App a pendu ... Alors que lorsque onStop est appelé, tout fonctionne normalement. Je suis sur Galaxy y avec Android 2.3.6 ... voir ma question sur stackoverflow.com/questions/13928591/... plz help !!!
Amit

@CommonsWare J'ai testé monsieur très vrai. + 1 pour vous Mais je veux poser une question que j'ai écrite finish () comme première déclaration dans ma fonction, puis il exécute toute la fonction, puis finish () est appelé Comment cela a géré.
Nikhil Agrawal

@NikhilAgrawal, votre fonction pourrait être renvoyée juste après l'appel de finish ().
antonio081014

Finish () appelle-t-il également onPause () et onStop () avant d'appeler onDestroy ()?
sr09 du

20

Chaque événement de cycle de vie comme onCreate, onResume, onPause.... onDestroyd'une activité est toujours appelée sur un seul thread - Le « fil conducteur ».

En bref, ce fil est soutenu par une file d'attente dans laquelle tous les événements d'activité sont publiés. Ce thread peut exécuter tous ces événements dans l'ordre d'insertion.

Si vous appelez finish()dans l'un des rappels du cycle de vie comme onCreate()... un message "terminer" sera ajouté à cette file d'attente mais le thread n'est pas libre de choisir et d'exécuter l'action "terminer" jusqu'à ce que la méthode en cours d'exécution retourne, c'est-à-dire que Thread est libéré de tâche courante.


13

ondestroy() est le dernier appel que vous recevez avant que votre activité ne soit détruite.

Cela peut se produire soit parce que l'activité se termine (quelqu'un l'a appelée finish() , soit parce que le système détruit temporairement cette instance de l'activité pour économiser de l'espace. Vous pouvez faire la distinction entre ces deux scénarios avec la isFinishing() méthode).


1

S'il y a deux activités A et B. Et votre flux va de A> B; et B = A appelle finish().

Ensuite,

La méthode à partir de laquelle vous avez appelé finish()s'exécutera comme Mark l'a mentionné. Et le flux des rappels sera comme suit -

  1. onPause() de activity A
  2. onRestart()> onStart()> onResume()De l' activité B
  3. Ensuite, vient la vraie différence. Si vous n'avez pas appelé finish()de activity A; seul onStop()de Activity Asera appelé ici. Bien que, dans ce cas, où nous avons appelé à finish()partir Activity A; Donc onStop()et les onDestroy()deux seront nécessaires activity A.
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.