85 votes

Terminer une ancienne activité et en démarrer une nouvelle ou vice versa

Je sais que le même résultat est obtenu avec les deux extraits de code

 finish();
startActivity(newActivity);
 

et

 startActivity(newActivity);
finish();
 

J'aimerais connaître votre opinion, s'il y a une grande différence entre eux?! Ou si l'un est meilleur qu'un autre? Et pourquoi?

Je vous remercie,

Mur

62voto

Emmanuel Points 6262

Lorsque vous démarrez startActivity (), tout ce que vous faites est de publier votre intention dans une file d’événements. Le démarrage effectif de l'activité a lieu de manière asynchrone dans un avenir proche. Donc, je ne vois pas une grande différence entre les deux.

28voto

Locutus Points 2306

L'animation est clairement différente (au moins à partir de 4.1). L'appel de finish() commence d'abord à s'estomper plus tôt et vous pouvez brièvement voir un fond noir avant que la nouvelle activité n'apparaisse. Appelez startActivity() premier s'estompe dans la nouvelle activité au-dessus de la ancien et le fond noir n'est pas visible.

9voto

scheffield Points 1873

En plus de la réponse d'Emmanuels:

Les deux méthodes startActivity et finish seront planifiées après la fin de la méthode invoquée, car elles sont toutes deux traitées par le thread d'interface utilisateur.

7voto

blindstuff Points 7595

Je voudrais faire le second choix, je ne suis pas la sauvegarde de ce sur quoi que ce soit que j'ai regardé à partir de sources officielles, mais, il a plus de sens pour le lancement de la nouvelle activité avant l'appel de la finition, de sorte que la nouvelle activité de pop-up par l'intermédiaire d'une intention, et maintenant l'activité de fond peut appeler tous ses de nettoyage méthodes.

Si vous le faites dans l'autre sens, peut-être que l'intention n'aurez pas le temps de feu avant que le nettoyage est terminé. I. e. l'activité sera appel startActivity() après le finish() appel?

J'espère que vous comprenez ce que j'essaie de l'état, je ferais la deuxième option, juste pour être sûr.

2voto

narges Points 11

J'ai eu le même problème:

Activity A: singleInstance
Activity B: singleInstance
Activity C: singleInstance

A starts B 
B starts C
C wants to start A:

ici, si j'utilise:

finish();
startActivity(A);

quelque chose filaire qui se passe: Activité B vient à l'avant-plan au lieu d'Un! mais si je change le code comme ceci:

startActivity(A);
finish();

tout semble ok et l'Activité vient visibles.

Je ne sais pas quel est le problème, mais il semble que dans le premier cas, C est fini avant l'exécution de la startActivity commande de manière à ce que la pile de retour gère la situation et montre son top de l'activité qui est B! mais dans le second cas, tout se passe normalement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X