141 votes

Android: Claire De L'Activité De La Pile

Je vais avoir plusieurs activités au sein de mon application. et le débit est très compliqué. Lorsque je clique sur Déconnexion de l'application naviagates à l'Écran de connexion et à partir de là, l'utilisateur peut à la sortie par bouton annuler (en appelant system.exit(0) )

quand je l'ai sortie ou à l'arrière du bouton, le système appelle une activité de la pile :( comment puis-je effacer toutes les activités dans la pile quand j'arrive à l'écran de Connexion? appelant finish() n'est pas pratique, car il ya tellement de nombreuses activités et certaines activités doivent pas être fermées lorsqu'elles sont actives, comme les indigènes de la caméra en invoquant l'activité.

validateuser logoutuser = new validateuser();
logoutuser.logOut();
Intent loginscreen = new Intent(homepage.this, Login2.class);
(homepage.this).finish();
loginscreen.setFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivity(loginscreen);

361voto

Umka Points 1184

La plupart d'entre vous sont dans l'erreur. Si vous souhaitez fermer activité existante pile indépendamment de ce qui existe et de créer de nouvelles racines, bon jeu de paramètres est la suivante:

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);

À partir de la doc:

public static final int FLAG_ACTIVITY_CLEAR_TASK
Ajout de l'API de niveau 11

Si dans une Intention passé à Context.startActivity(), ce drapeau sera la cause de toutes les tâches que serait associé à l'activité doit être désactivée avant la l'activité est lancée. Autrement dit, l'activité devient la nouvelle racine d'une sinon vide tâche et les anciennes activités sont finis. Cela peut seulement être utilisé en conjonction avec d' FLAG_ACTIVITY_NEW_TASK.

30voto

David Olsson Points 3861

Lorsque vous appelez startActivity sur le dernier exercice, vous pouvez toujours utiliser

Intent.FLAG_ACTIVITY_CLEAR_TOP

comme un drapeau sur cette intention.

Lire plus sur le drapeau ici.

16voto

Mannaz Points 6351

Ici est une simple méthode d'assistance pour le démarrage d'une nouvelle activité de les nouveaux activité qui fonctionne à partir de l'API de niveau 4, jusqu'à la version actuelle 17:

static void startNewMainActivity(Activity currentActivity, Class<? extends Activity> newTopActivityClass) {
    Intent intent = new Intent(currentActivity, newTopActivityClass);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
        intent.addFlags(0x8000); // equal to Intent.FLAG_ACTIVITY_CLEAR_TASK which is only available from API level 11
    currentActivity.startActivity(intent);
}

l'appeler comme ce à partir de votre activité:

startNewMainActivity(this, MainActivity.class);

3voto

Prashant Gami Points 784

Dans mon cas, LoginActivity a été fermé. Comme un résultat,

Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK

n'a pas aidé.

Cependant, la mise en

Intent.FLAG_ACTIVITY_NEW_TASK

m'a aidé.

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