J'ai plusieurs activités dans mon application. et le flux est très compliqué. Lorsque je clique, l'application de déconnexion accède à l'écran de connexion et à partir de là, l'utilisateur peut quitter en cliquant sur le bouton d'annulation (appelant system.exit(0)
)
lorsque je quitte ou que je retourne, le système appelle une activité de la pile: (comment puis-je effacer toutes les activités de la pile lorsque j'atteins l'écran de connexion? L'appel finish()
n'est pas pratique car il y a tellement d'activités et certaines activités ne devraient pas être fermées quand ils sont actifs comme une caméra native invoquant une 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);
android
android-activity
stack
Jay Mayu
la source
la source
Réponses:
La plupart d'entre vous ont tort. Si vous souhaitez fermer la pile d'activités existante indépendamment de ce qui s'y trouve et créer une nouvelle racine, le jeu d'indicateurs correct est le suivant:
Du doc :
la source
IntentCompat.makeRestartActivityTask
partir de la bibliothèque de support.Lorsque vous appelez
startActivity
la dernière activité, vous pouvez toujours utilisercomme indicateur de cette intention.
En savoir plus sur le drapeau ici .
la source
Voici une méthode d'aide simple pour démarrer une nouvelle activité en tant que nouvelle activité principale qui fonctionne du niveau d'API 4 jusqu'à la version actuelle 17:
appelez-le comme ceci à partir de votre activité actuelle:
la source
Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB
autrement neintent.addFlags(0x8000);
sera jamais ajoutéEffacez le backstate d'activité par le code ci-dessous:
Terminé
la source
Dans mon cas, LoginActivity a également été fermé. Par conséquent,
n'a pas aidé.
Cependant, le réglage
m'a aidé.
la source
la source
this.finish()
etsetFlags()
aussi pour effacer l'activité actuelle?J'ai noté que vous avez demandé une solution qui ne repose pas sur
finish()
, mais je me demande si cela peut néanmoins aider.J'ai suivi si un indicateur de sortie est déclenché avec une variable de classe statique, qui survit à toute la durée de vie de l'application. Dans chaque activité pertinente
onResume()
, utilisezLa classe ExitHelper
Disons que dans mainActivity, un utilisateur appuie sur un bouton pour quitter - vous pouvez définir
ExitHelper.isExitFlagRaised = true;
et ensuitefinish()
. Par la suite, d'autres activités pertinentes qui reprendront automatiquement seront également terminées.la source
Cette décision fonctionne bien:
Mais la nouvelle activité se lance longtemps et vous voyez un écran blanc un certain temps. Si cela est critique, utilisez cette solution de contournement:
Comment l'utiliser:
Inconvénient: toutes les activités qui doivent être fermées sur la pile doivent étendre BaseActivity
la source
Pour les développeurs Xamarin, vous pouvez utiliser:
la source
Utilisation de Kotlin:
Vous pouvez définir le drapeau directement en utilisant la méthode setter. Dans Kotlin
or
est le remplacement de Java bitwise ou|
.Si vous prévoyez de l'utiliser régulièrement, créez une fonction d'extension d'intention
Vous pouvez ensuite appeler directement cette fonction avant de démarrer l'intention
la source