Lorsque l'utilisateur souhaite quitter toutes les activités ouvertes Pour que l'utilisateur soit en mesure d'utiliser l'application, il doit appuyer sur un bouton qui charge la première activité qui s'exécute au démarrage de l'application, effacer toutes les autres activités, puis faire en sorte que la dernière activité se termine. Faites exécuter le code suivant lorsque l'utilisateur appuie sur le bouton de sortie. Dans mon cas, LoginActivity
est la première activité de mon programme à s'exécuter.
Intent intent = new Intent(getApplicationContext(), LoginActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("EXIT", true);
startActivity(intent);
Le code ci-dessus efface toutes les activités à l'exception de LoginActivity
. Ensuite, placez le code suivant dans le fichier LoginActivity
's onCreate(...)
à écouter quand LoginActivity
est recréé et le signal 'EXIT' a été passé :
if (getIntent().getBooleanExtra("EXIT", false)) {
finish();
}
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'il utilise sont exécutés en arrière-plan ou non.
Les développeurs du système d'exploitation Android veulent que votre programme puisse survivre à un arrêt inattendu et à une mise hors tension du téléphone, et que lorsque l'utilisateur redémarre le programme, il reprenne là où il s'était arrêté. L'utilisateur peut donc recevoir un appel téléphonique pendant qu'il utilise votre application, et ouvrir des cartes, ce qui nécessite de libérer des ressources supplémentaires pour votre application.
Lorsque l'utilisateur reprend votre application, il reprend là où il s'est arrêté, sans interruption. Ce bouton de sortie usurpe le pouvoir du gestionnaire d'activité, ce qui peut causer des problèmes avec le cycle de vie des programmes Android géré automatiquement.
0 votes
Exécutez-vous vos activités imbriquées en utilisant startActivityForResult ?
0 votes
Non, toutes les activités sont lancées avec startActivity.
0 votes
J'utilise des activités imbriquées alors que Cod exécute finishaffinitytask() dans une activité imbriquée. Est-ce que cela change le comportement ? car parfois j'obtiens un échec dans la livraison du résultat ResultInfo lorsque finishaffinitytask est exécuté.
0 votes
Veuillez consulter cette réponse, elle vous aidera sûrement. stackoverflow.com/a/25159180/2732632
4 votes
Android 21 a introduit Activity.finishAndRemoveTask().
0 votes
Seul ce drapeau fonctionne pour moi : intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK) ;