57 votes

Android: new Intent () démarre une nouvelle instance avec android: launchMode = "singleTop"

J'ai d'Activité A avec android:launchMode="singleTop" dans le manifeste.

Si je vais à l'Activité de l' B, C et D là, j'ai les raccourcis du menu pour revenir à ma racine des applications d'activité (A).

Le code ressemble à ceci:

Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
startActivity(myIntent);

Cependant, au lieu de retourner à l'instance existante A mon MainActivity.class il crée une nouvelle instance -> il va à l' onCreate() au lieu de onNewIntent().

Ce n'est pas le comportement attendu, droit?

71voto

Vidar Vestnes Points 14317

Cela devrait faire l'affaire.

 <activity ... android:launchMode="singleTop" />
 

Lorsque vous créez une intention de démarrer l'application, utilisez:

 Intent intent= new Intent(context, YourActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP);
 

C'est ce qui devrait être nécessaire.

29voto

znq Points 13027

En fin de compte, ce qui a fonctionné pour moi a été le suivant:

 Intent myIntent = new Intent(getBaseContext(), MainActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(myIntent);
 

14voto

mbaird Points 31293

Citation de la documentation:

Le "standard" et "singleTop" modes diffèrent les uns des autres en un seul respect: Chaque fois qu'il y a de nouveaux intention pour un "standard" de l'activité, une nouvelle instance de la classe est créée pour répondre à cette intention. Chaque instance les poignées d'une seule intention. De même, un nouvelle instance d'un "singleTop" de l'activité peut également être créée pour gérer un nouveau l'intention. Cependant, si la cible de la tâche a déjà une instance de l'activité au sommet de sa pile, l'instance recevrez la nouvelle intention (dans un onNewIntent() d'appel); une nouvelle instance n'est créée.

Je ne suis pas 100% sûr de ce que "a déjà une instance de l'activité en haut de sa pile" des moyens, mais peut-être que votre activité n'est pas cette condition.

Serait - singleTask ou singleInstance du travail pour vous? Ou peut-être vous pouvez essayer le réglage de FLAG_ACTIVITY_SINGLE_TOP sur le but de la création pour voir si cela fait une différence, même si je ne pense pas que ça.

6voto

rbin Points 31

Vous pouvez revenir à la même instance d'activité existante avec android:launchMode="singleInstance"

dans le manifeste. Lorsque vous revenez à A de B , il peut être nécessaire finish() de détruire B .

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