Mon application présente les écrans de flux suivants:
Home->screen 1->screen 2->screen 3->screen 4->screen 5
Maintenant, j'ai un log out
bouton commun dans chaque écran
( Home/ screen 1 / screen 2 /screen 3/ screen 4 / screen 5
)
Je veux que lorsque l'utilisateur clique sur le bouton de déconnexion (depuis n'importe quel écran), tous les écrans seront terminés et un nouvel écran Log in
s'ouvrira.
J'ai presque tout essayé FLAG_ACTIVITY
pour y parvenir. Je passe également par quelques réponses dans stackoverflow, mais ne pouvant pas résoudre le problème. Mon application est sur Android 1.6 donc ne peut pas utiliserFLAG_ACTIVITY_CLEAR_TASK
Existe-t-il un moyen de résoudre le problème?
Réponses:
Utilisation:
Cela effacera toutes les activités au-dessus de la maison.
En supposant que vous terminez l'écran de connexion lorsque l'utilisateur se connecte et que l'accueil est créé et ensuite tous les écrans de 1 à 5 en plus de celui-ci. Le code que j'ai publié vous ramènera à l'écran d'accueil en terminant toutes les autres activités. Vous pouvez ajouter un supplément dans l'intention et lire cela dans l'activité de l'écran d'accueil et le terminer également (peut-être relancer l'écran de connexion à partir de là ou quelque chose).
Je ne suis pas sûr mais vous pouvez également essayer de vous connecter avec ce drapeau. Je ne sais pas comment les activités seront ordonnées dans ce cas. Donc, je ne sais pas si cela effacera ceux sous l'écran sur lequel vous vous trouvez, y compris celui sur lequel vous vous trouvez actuellement, mais c'est certainement la voie à suivre.
J'espère que cela t'aides.
la source
singleInstance
, envisagez d'utiliserFLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP
comme indicateurs pour l'intention. Cela terminera les activités intermédiaires et démarrera (ou ramènera au premier plan) l'activité souhaitée.intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);
à mon activité ne m'a pas aidé.Il n'a pas terminé les activités intermédiaires.Lorsque j'appuie sur l'écran de connexion, je peux voir les activités précédentes.Voici mon codeIntent intent=new Intent(BaseActivity.this, Login.class);intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP);startActivity(intent);
.Vous pouvez essayer
Intent.FLAG_ACTIVITY_CLEAR_TASK|Intent.FLAG_ACTIVITY_NEW_TASK
. Il effacera totalement toutes les activités précédentes et commencera une nouvelle activité.la source
Avant de lancer votre nouvelle activité, ajoutez simplement le code suivant:
Ou si vous souhaitez qu'il fonctionne dans les versions précédentes d'Android:
la source
Lorsque l'utilisateur souhaite quitter toutes les activités ouvertes , il doit appuyer sur un bouton qui charge la première activité qui s'exécute au démarrage de votre application, effacer toutes les autres activités, puis terminer la dernière activité restante. Exécutez le code suivant lorsque l'utilisateur appuie sur le bouton Quitter. Dans mon cas,
LoginActivity
c'est la première activité de mon programme à exécuter.Le code ci-dessus efface toutes les activités à l'exception de
LoginActivity
. Ensuite, mettez le code suivant dans leLoginActivity
'sonCreate(...)
, pour écouter quandLoginActivity
est recréé et le signal' EXIT 'passé:Pourquoi est-il si difficile de créer un bouton de sortie dans Android?
Android s'efforce de vous décourager d'avoir un bouton "Quitter" dans votre application, car ils veulent que l'utilisateur ne se soucie jamais de savoir si les programmes qu'ils utilisent s'exécutent en arrière-plan ou non.
Les développeurs d'Android OS veulent que votre programme puisse survivre à un arrêt inattendu et à une mise hors tension du téléphone, et lorsque l'utilisateur redémarre le programme, il reprend là où il s'était arrêté. Ainsi, l'utilisateur peut recevoir un appel téléphonique pendant qu'il utilise votre application et ouvrir des cartes qui nécessitent que votre application soit libérée pour plus de ressources.
Lorsque l'utilisateur reprend votre application, il reprend là où il s'était arrêté sans interruption. Ce bouton de sortie usurpe le pouvoir du gestionnaire d'activité, ce qui peut potentiellement causer des problèmes avec le cycle de vie du programme Android géré automatiquement.
la source
Cela fonctionnera pour toutes les versions d'Android. Où
IntentCompat
la classe a été ajoutée dans la bibliothèque de support Android.la source
IntentCompat.FLAG_ACTIVITY_CLEAR_TASK
n'est pas reconnu, utilisezIntent
plutôtIntentCompat
.Utilisez ce qui suit pour l'activité
supprimer l'indicateur CLEAR_TASK pour l'utilisation du fragment.
J'espère que cela peut utiliser pour certaines personnes.
la source
Je suppose que je suis en retard, mais il y a une réponse simple et courte. Il existe une méthode finishAffinity () dans Activity qui terminera l'activité en cours et toutes les activités parentes, mais elle ne fonctionne que dans Android 4.1 ou supérieur.
Pour API 16+, utilisez
finishAffinity();
Pour les moins de 16 ans, utilisez
ActivityCompat.finishAffinity(YourActivity.this);
J'espère que cela aide!
la source
De developer.android.com :
Terminez cette activité ainsi que toutes les activités immédiatement en dessous dans la tâche en cours qui ont la même affinité. Ceci est généralement utilisé lorsqu'une application peut être lancée sur une autre tâche (telle qu'une ACTION_VIEW d'un type de contenu qu'il comprend) et que l'utilisateur a utilisé la navigation vers le haut pour passer de la tâche actuelle à sa propre tâche. Dans ce cas, si l'utilisateur a accédé à d'autres activités de la deuxième application, toutes ces activités doivent être supprimées de la tâche d'origine dans le cadre du changement de tâche.
Notez que cette finition ne vous permet pas de fournir des résultats à l'activité précédente et une exception sera levée si vous essayez de le faire.
la source
En passant, bon à savoir
Cette réponse fonctionne ( https://stackoverflow.com/a/13468685/7034327 )
alors que cela ne fonctionne pas
.setFlags()
remplace tous les drapeaux précédents et n'ajoute aucun nouveau drapeau.addFlags()
fait.Donc ça marchera aussi
la source
Si votre application a une version minimum de sdk 16, vous pouvez utiliser finishAffinity ()
Terminez cette activité ainsi que toutes les activités immédiatement en dessous dans la tâche en cours qui ont la même affinité.
Cela fonctionne pour moi Dans l'écran Top Payment, supprimez toutes les activités de back-stack,
http://developer.android.com/reference/android/app/Activity.html#finishAffinity%28%29
la source
Une solution que j'ai implémentée pour cela (je pense que je l'ai trouvée sur Stack Overflow quelque part, mais je ne m'en souviens pas, donc merci à celui qui l'a fait en premier lieu):
Pour chacune de vos activités, procédez comme suit:
Ensuite, dans votre LoginActivity, remplacez onKeyDown:
la source
Pour le bouton de déconnexion sur le dernier écran de l'application, utilisez ce code sur l'écouteur du bouton de déconnexion pour terminer toutes les activités précédentes ouvertes, et votre problème est résolu.
la source
la source
setFlags
remplacera tous les précédents, donc le derniersetFlags
n'est valide que, les précédents sont remplacés. Vous n'avez donc pas besoin d'appeleri1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); i1.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
j'ai le même problème que vous pouvez utiliser
IntentCompat
, comme ceci:ce code fonctionne pour moi.
Android api 17
la source
Dans mon cas, j'utilise la
finishAffinity()
fonction dans la dernière activité comme:J'espère que ce sera utile.
la source
au lieu d'utiliser
finish()
simplement utiliserfinishAffinity();
la source
Connectez-vous> Accueil-> écran 1-> écran 2-> écran 3-> écran 4-> écran 5
sur l'écran 4 (ou tout autre) ->
avecla source
pour API> = 15 à API 23 solution simple.
la source
Si vous utilisez
startActivityForResult()
dans vos activités précédentes, remplacez simplementOnActivityResult()
et appelez lafinish();
méthode à l'intérieur dans toutes les activités .. Cela fera le travail ...la source
startActivity
seulement.onActivityResult
chaque activité. J'ai implémenté la suggestion de DArkO et atteint mon objectif et merci pour l'aide.Lorsque l'utilisateur clique sur le bouton de déconnexion, puis écrivez le code suivant:
Et aussi quand après la connexion si vous appelez une nouvelle activité, n'utilisez pas finish ();
la source
Simplement, lorsque vous quittez l'écran de connexion, pas lorsque vous avez terminé l'écran de connexion.
Et puis dans toutes les activités avancées, utilisez ceci pour vous déconnecter:
Cela fonctionne parfaitement.
la source
Si vous vous connectez à l'utilisateur
screen 1
et à partir de là, vous accédez aux autres écrans, utilisezla source
onKeyDown
etonBackPressed
(ouonKeyDown
, si vous souhaitez prendre en charge les versions Android <2.0) dans chacune de vos activités (sauf la connexion), etstartActivity(login)
là comme indiqué ci-dessus.J'ai trouvé ça, ça va effacer toute l'histoire et sortir
la source
Je suppose que je suis en retard, mais il y a une réponse simple et courte. Il existe une méthode finishAffinity () dans Activity qui terminera l'activité en cours et toutes les activités parentes, mais elle ne fonctionne que dans Android 4.1 ou supérieur.
Pour API 16+, utilisez
finishAffinity ();
Pour les moins de 16 ans, utilisez
ActivityCompat.finishAffinity (YourActivity.this);
J'espère que cela aide!
shareedit a répondu le 27 mai 18 à 8:03
Akshay Taru
la source
J'ai trouvé que cette solution fonctionnait sur tous les appareils malgré le niveau API (même pour <11)
la source
Le meilleur moyen de fermer toutes les activités précédentes et d'effacer la mémoire
la source
la source