web-dev-qa-db-fra.com

Activity.finishAffinity () vs Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK

Sous Android, si vous souhaitez effacer votre pile Activity actuelle et lancer une nouvelle Activity (par exemple, vous déconnecter de l'application et lancer une connexion Activity), semble être deux approches.

Y a-t-il des avantages l'un par rapport à l'autre si votre niveau d'API cible est supérieur à 16?

1) Terminer l'affinité

Appel de finishAffinity() à partir d'une activité. Activity.finishAffinity

2) Indicateurs d'intention

Intent intent = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
finish();

L'approche finishAffinity() convient pour> = API 16.

L'approche Intent flags convient à> = API 11.

Pour être clair, dans le but d'effacer la pile Activity actuelle, les deux approches semblent également fonctionner également. Ma question est la suivante: y a-t-il des problèmes que les gens ont connus et, par conséquent, y a-t-il une raison de choisir l'un plutôt que l'autre?

24
Craig Russell

Fonctionnellement, il n'y a pas de différence, mais en testant cela sur GenyMotion, il semble y avoir une légère différence visuelle. Voir la diffusion Web: https://drive.google.com/file/d/0B8Y77sY7Y2CGRS02c3UyNjd2MGs/view?usp=sharing

Vous devrez essayer cela sur une gamme d'appareils pour voir à quel point c'est cohérent.

Subjectivement, je dirais aller avec la finishAffinity() parce qu'elle est plus explicite. Cependant, si vous devez prendre en charge <SDK 16, vous n'avez pas vraiment le choix.

13
brindy

Si API> = 21, vous pouvez utiliser la commande de:

finishAndRemoveTask ();

Termine toutes les activités de cette tâche et la supprime de la liste des tâches récentes.

https://developer.Android.com/reference/Android/app/ActivityManager.AppTask.html

0
Mike Yan

Essaye ça

Intent.FLAG_ACTIVITY_CLEAR_TOP

il efface la pile des activités précédentes

0