54 votes

Comment effacer la pile d'activités Android?

J'ai une application avec plusieurs Activités dans Android et je veux que l'utilisateur soit en mesure de vous déconnecter en appuyant sur un bouton de menu. Le problème que j'ai, c'est que

A) d'Android ne permet pas de mettre fin à l'application et
B) même quand je l'ai envoyer à l'utilisateur de l' LoginActivity encore une fois, ils peuvent toujours appuyer sur la touche de retour et obtenir le droit de retour à l'activité précédente ils étaient.

J'ai déjà essayé de lancer l'Activité avec les deux indicateurs suivants:

Intent intent  = new Intent(this, LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);        
startActivity(intent);

J'ai aussi essayé avec chacun d'eux, par eux-mêmes.

J'ai aussi essayé de les appeler, finish() après startActivity(intent) comme je l'ai lu dans un autre StackOverflow question.

42voto

deweylewie Points 372

Cela devrait être binaire OU, sinon vous écraserez le drapeau précédent.

 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 

Ainsi:

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

35voto

Tenfour04 Points 4190

Dans votre activité de connexion, remplacez le bouton Précédent pour masquer votre application au lieu de la terminer:

 @Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        moveTaskToBack(true);
        return true;
    }
    return super.onKeyDown(keyCode, event);
}
 

Veillez également à définir android: alwaysRetainTaskState = "true" sur l'activité racine, de sorte qu'Android n'effacera pas votre pile (y compris l'activité de connexion) après 30 minutes d'inactivité de l'utilisateur.

Ensuite, appelez simplement finish () une fois la connexion établie.

31voto

Selon Wakka in Suppression d'une activité de la pile d'historique ...


Ajoutez les attributs android:noHistory="true" à votre <activity> dans le AndroidManifest.xml comme ceci:

     <activity android:name=".MyActivity"
        android:noHistory="true">
    </activity>
 

6voto

matangs Points 281

Si vous utilisez Android API 11 ou plus, vous pouvez utiliser le code suivant pour effacer la pile.

 intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
 

5voto

amalBit Points 3406

Cela n'effacera pas votre pile d'activités.

Même après avoir suivi toutes les réponses ci-dessus, quand j’ai appuyé sur le bouton Retour, la dernière activité a été affichée pendant une seconde avant la fermeture de l’application.

C'est ce que j'ai fait:

  @Override
 public void onBackPressed() {

 Intent startMain = new Intent(Intent.ACTION_MAIN);
 startMain.addCategory(Intent.CATEGORY_HOME);
 startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
 startActivity(startMain);

 }
 

Maintenant, mon application quitte OnBack Press :) sans aucun problème.

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