Je souhaite fermer mon application pour qu'elle ne s'exécute plus en arrière-plan.
Comment faire ça? Est-ce une bonne pratique sur la plate-forme Android?
Si je compte sur le bouton "retour", cela ferme l'application, mais il reste en arrière-plan. Il existe même une application appelée "TaskKiller" juste pour tuer ces applications en arrière-plan.
Réponses:
Android a un mécanisme en place pour fermer une application en toute sécurité conformément à sa documentation. Dans la dernière activité qui est quittée (généralement l'activité principale qui est apparue pour la première fois lorsque l'application a démarré), placez simplement quelques lignes dans la méthode onDestroy (). L'appel à System.runFinalizersOnExit (true) garantit que tous les objets seront finalisés et récupérés lors de la fermeture de l'application. Vous pouvez également tuer une application rapidement via android.os.Process.killProcess (android.os.Process.myPid ()) si vous préférez. La meilleure façon de le faire est de placer une méthode comme la suivante dans une classe d'assistance, puis de l'appeler chaque fois que l'application doit être tuée. Par exemple dans la méthode destroy de l'activité racine (en supposant que l'application ne tue jamais cette activité):
De plus, Android ne notifiera pas à une application l' événement de la touche HOME , vous ne pouvez donc pas fermer l'application lorsque la touche HOME est enfoncée. Android se réserve l' événement de clé HOME afin qu'un développeur ne puisse pas empêcher les utilisateurs de quitter leur application. Cependant, vous pouvez déterminer que la touche HOME est enfoncée en définissant un indicateur sur true dans une classe d'assistance qui suppose que la touche HOME a été enfoncée, puis en changeant l'indicateur en false lorsqu'un événement se produit qui montre que la touche HOME n'a pas été enfoncée, puis vérification de la présence de la touche HOME enfoncée dans la méthode onStop () de l'activité.
N'oubliez pas de manipuler la touche HOME pour tous les menus et dans les activités qui sont lancées par les menus. Il en va de même pour la touche RECHERCHE . Voici quelques exemples de classes pour illustrer:
Voici un exemple d'activité racine qui tue l'application lorsqu'elle est détruite:
Voici une activité abstraite qui peut être étendue pour gérer la clé HOME pour toutes les activités qui l'étendent:
Voici un exemple d'écran de menu qui gère la touche HOME :
Voici un exemple de classe d'assistance qui gère la clé HOME dans l'application:
la source
killApp()
, car Google a indiqué que cela entraînerait un comportement imprévisible.OUI! Vous pouvez très certainement fermer votre application pour qu'elle ne fonctionne plus en arrière-plan. Comme d'autres l'ont fait remarquer,
finish()
la méthode recommandée par Google ne signifie pas vraiment que votre programme est fermé.Ce droit là fermera votre application en laissant rien en arrière-plan.Cependant, utilisez-le à bon escient et ne laissez pas les fichiers ouverts, les poignées de base de données ouvertes, etc.Ces choses seraient normalement nettoyées via la
finish()
commande.Personnellement, je déteste quand je choisis Quitter dans une application et que cela ne se ferme pas vraiment.
la source
Voici comment je l'ai fait:
Je viens de mettre
à l'intérieur de la méthode qui ouvre une activité, puis à l'intérieur de la méthode de SOMECLASSNAME qui est conçue pour fermer l'application que j'ai mise:
Et j'ai mis ce qui suit dans ma classe principale:
la source
Juste pour répondre à ma propre question maintenant après tant de temps (puisque CommonsWare a commenté la réponse la plus populaire disant que nous ne devrions PAS faire cela):
Lorsque je veux quitter l'application:
FLAG_ACTIVITY_CLEAR_TOP
(qui quittera toutes les autres activités commencées après, ce qui signifie - toutes). Faites simplement pour avoir cette activité dans la pile d'activités (ne pas la terminer pour une raison quelconque à l'avance).finish()
cette activitéÇa y est, ça marche assez bien pour moi.
la source
Écrivez simplement ce code sur votre bouton EXIT cliquez.
Et dans la méthode onCreate () de votre MainActivity.class, écrivez ci-dessous le code en première ligne,
la source
Ce n'est pas possible en utilisant les API du framework. C'est à la discrétion du système d'exploitation (Android) de décider quand un processus doit être supprimé ou rester en mémoire. C'est pour des raisons d'efficacité: si l'utilisateur décide de relancer l'application, alors elle est déjà là sans qu'elle doive être chargée en mémoire.
Donc non, ce n'est
pas seulementdécouragé, c'est impossiblede le faire.la source
Pour sortir des applications:
Voie 1:
appeler
finish();
et passer outreonDestroy();
. Mettez le code suivant dansonDestroy()
:ou
Voie 2:
Voie 3:
Voie 4:
Voie 5:
Parfois, l'appel
finish()
ne quittera que l'activité en cours, pas l'ensemble de l'application. Cependant, il existe une solution de contournement pour cela. Chaque fois que vous démarrez unactivity
, démarrez-le en utilisantstartActivityForResult()
. Lorsque vous souhaitez fermer l'ensemble de l'application, vous pouvez faire quelque chose comme ceci:Ensuite, définissez le
onActivityResult(...)
rappel de chaque activité afin que lorsqu'unactivity
retour avec laRESULT_CLOSE_ALL
valeur, il appelle égalementfinish()
:la source
C'est ainsi que Windows Mobile a fonctionné depuis ... eh bien ... jamais! Voici ce que Microsoft a à dire à ce sujet:
http://blogs.msdn.com/windowsmobile/archive/2006/10/05/The-Emperor-Has-No-Close.aspx (est-ce triste que je me souvienne du titre du billet de blog depuis 2006? J'ai trouvé l'article sur Google en cherchant "l'empereur n'a pas de proche" lol)
En bref:
De nombreux commentaires dans cette question à O'Reilly suggèrent qu'Android se comporte à peu près de la même manière, fermant les applications qui n'ont pas été utilisées depuis un certain temps uniquement lorsque Android a besoin de la mémoire qu'elles utilisent.
Puisqu'il s'agit d'une fonctionnalité standard, changer le comportement pour fermer avec force changerait l'expérience utilisateur. De nombreux utilisateurs seraient habitués au rejet en douceur de leurs applications Android.Ainsi, lorsqu'ils en rejettent une avec l'intention d'y revenir après avoir effectué d'autres tâches, ils peuvent être plutôt frustrés que l'état de l'application soit réinitialisé ou que cela prenne plus de temps. ouvrir. Je m'en tiendrai au comportement standard car c'est ce à quoi on s'attend.
la source
L'appel de la
finish()
méthode sur une activité a l'effet souhaité sur cette activité en cours.la source
aucune de toutes les réponses ci-dessus ne fonctionne bien sur mon application
voici mon code de travail
sur votre bouton de sortie:
ce code doit fermer toute autre activité et mettre MainActivity au sommet maintenant sur votre MainActivity:
la source
Mettez une
finish();
déclaration comme ci-dessous:Dans chaque activité.
la source
la source
Copiez le code ci-dessous et collez le fichier AndroidManifest.xml sous Première balise d'activité.
Ajoutez également ce code ci-dessous dans tout sous Activity Tag dans le fichier AndroidManifest.xml
la source
Pas possible avec 2.3. Je recherche beaucoup et j'ai essayé de nombreuses applications. La meilleure solution consiste à installer à la fois (go taskmanager) et (fast reboot). Lorsque vous les utilisez ensemble, cela fonctionnera et libèrera la mémoire. Une autre option consiste à passer à Android Ice Cream Sandwich 4.0.4 qui permet de contrôler (fermer) les applications.
la source
Je voulais revenir à l'écran d'accueil de mon appareil Android, j'ai donc simplement utilisé:
la source
L'utilisation de
finishAffinity()
peut être une bonne option si vous souhaitez fermer toutes les activités de l'application. Selon les documents Android-la source
et en manifeste:
Ensuite, vous pouvez appeler
CloseAppActivity.closeApp(fromActivity)
et l'application sera fermée.la source
Écrivez simplement le code suivant dans onBackPressed:
la source
en appelant finish (); dans le bouton OnClick ou dans le menu
la source
finish()
ne tue pas l'application. Il peut revenir à l'intention précédente ou l'arrière-plan de l'application.Je pense que cela fermera votre activité et toutes les sous-activités qui y sont liées.
la source
Le moyen le meilleur et le plus court d'utiliser la table System.exit.
La VM arrête toute exécution et le programme se ferme.
la source
Utilisez "
this.FinishAndRemoveTask();
" - il ferme correctement l'applicationla source