J'ai trouvé quelques codes pour quitter une application Android par programme. En appelant l'un des codes suivants dans onDestroy (), quittera-t-il complètement l'application?
System.runFinalizersOnExit(true)
(OU)android.os.Process.killProcess(android.os.Process.myPid());
Je ne veux pas exécuter mon application en arrière-plan après avoir cliqué sur le bouton Quitter. Veuillez me suggérer, puis-je utiliser l'un de ces codes pour quitter mon application? Si oui, quel code puis-je utiliser? Est-ce un bon moyen de quitter l'application sur Android?
Réponses:
Depuis l'API 16, vous pouvez utiliser la méthode finishAffinity, qui semble assez proche de la fermeture de toutes les activités associées par son nom et sa description Javadoc:
Depuis l'API 21, vous pouvez utiliser une commande très similaire
la source
System.exit(0);
. Merci pour votre réponse! Enfin, j'ai trouvé une solution décente.System.exit(0)
est la seule solution qui a fonctionné pour moi.c'est le meilleur moyen de quitter votre application. !!!
La meilleure solution pour moi.
la source
System.exit(0);
. La bonne solution a été publiée par @sivi (sa réponse est ci-dessus)finishAffinity();
System.exit(0);
Si vous n'utilisez que
finishAffinity();
sans queSystem.exit(0);
votre application se ferme mais que la mémoire allouée sera toujours utilisée par votre téléphone, alors ... si vous voulez une application propre et vraiment quitter, utilisez les deux.Ceci est la méthode la plus simple et fonctionne n'importe où, quittez l'application pour de vrai, vous pouvez avoir beaucoup d'activités ouvertes tout en quittant sans problème.
exemple sur un clic de bouton
ou si vous voulez quelque chose de sympa, exemple avec une boîte de dialogue d'alerte avec 3 boutons OUI NON et ANNULER
la source
System.exit(0);
Vous ne devez pas libérer cette mémoire, le système le fera pour vous si vous en avez besoin. C'est le comportement souhaité.Réfléchissez bien si vous devez tuer l'application: pourquoi ne pas laisser le système d'exploitation déterminer où et quand libérer les ressources?
Sinon, si vous êtes absolument sûr, utilisez
En réaction au commentaire de @dave appleton: Tout d'abord, lisez le grand combo questions / réponses @gabriel publié: La fermeture d' une application est-elle mal vue?
En supposant maintenant que nous l'avons, la question ici a toujours une réponse, à savoir que le code dont vous avez besoin si vous faites quoi que ce soit avec l'arrêt est
finish()
. De toute évidence, vous pouvez avoir plus d'une activité, etc., etc., mais ce n'est pas le but. Permet d'exécuter certains des cas d'utilisationDonc en fin de compte, bien sûr,
finish()
ne tue pas tout, mais c'est toujours l'outil dont vous avez besoin, je pense. S'il existe un cas d'utilisation pour "tuer toutes les activités", je ne l'ai pas encore trouvé.la source
finish()
ne tuera pas l'application.finish()
est utilisé tout le temps:Call this when your activity is done and should be closed.
C'est le même effet que d'appuyer sur le bouton "retour".Activity
(pas leApplication
). Par exemple, vous pouvez démarrer une nouvelle activité pour montrer à l'utilisateur des informations. Après un délai d'attente ou en appuyant sur «OK», vous pouvez appelerfinish()
pour revenir à l'activité d'appel.Je pense que cette application devrait être tuée dans certains cas. Par exemple, une application ne peut être utilisée qu'après la connexion. L'activité de connexion comporte deux boutons, «connexion» et «annuler». Lorsque vous cliquez sur le bouton «Annuler», cela signifie définitivement «Terminer l'application». Personne ne veut que l'application vive en arrière-plan. Je suis donc d'accord que certains cas doivent fermer l'application.
la source
Créez un
ExitActivity
et déclarez-le dans le manifeste. Et appelezExitActivity.exit(context)
à quitter l'application.la source
Il n'y a pas d'application quittant Android , SampleActivity.this.finish (); terminera l'activité en cours.
Lorsque vous passez d'une activité à une autre, continuez de terminer la précédente
la source
Tout d'abord, cette approche nécessite min Api 16.
Je diviserai cette solution en 3 parties pour résoudre ce problème plus largement.
1. Si vous souhaitez quitter l'application dans une activité, utilisez cet extrait de code:
2. Si vous souhaitez quitter l'application dans une classe non Activity qui a accès à Activity, utilisez cet extrait de code:
3. Si vous souhaitez quitter l'application dans une classe non Activity et ne pouvez pas accéder à Activity tel que Service, je vous recommande d'utiliser BroadcastReceiver. Vous pouvez ajouter cette approche à toutes vos activités dans votre projet.
Créez des variables d'instance LocalBroadcastManager et BroadcastReceiver. Vous pouvez remplacer getPackageName () + ". Closeapp" si vous le souhaitez.
Ajoutez-les à la méthode d'activité onCreate ().
N'oubliez pas non plus d'appeler unregister receiver à la méthode d'activité onDestroy ()
Pour quitter l'application, vous devez envoyer une diffusion à l'aide de LocalBroadcastManager que j'utilise dans ma classe PlayService qui étend le service.
la source
Vous pouvez utiliser à
finishAndRemoveTask ()
partir de l'API 21la source
Cela dépend de la vitesse à laquelle vous souhaitez fermer votre application.
Un moyen sûr de fermer votre application est finishAffinity ();
Il ferme votre application une fois tous les processus terminés. Cela peut prendre un certain temps. Si vous fermez votre application de cette façon et la redémarrez après un court instant, il est possible que votre nouvelle application s'exécute dans le même processus. Avec tous les processus non terminés et les objets singleton de l'ancienne application.
Si vous voulez être sûr que votre application est complètement fermée, utilisez System.exit (0);
Cela fermera votre application immédiatement. Mais il est possible que vous endommagiez les fichiers ouverts par votre application ou que la modification des préférences partagées ne se termine pas. Alors utilisez-le soigneusement.
Si vous utilisez le chien de garde en combinaison avec une tâche de longue durée, vous pouvez voir les influences des différentes méthodes.
Cela tue votre application après 2 secondes sans afficher de boîte de dialogue ANR ou quelque chose comme ça. Si vous supprimez System.exit (0) , exécutez ce code et redémarrez l'application après sa fermeture, vous rencontrerez un comportement étrange, car la boucle sans fin est toujours en cours d'exécution.
la source
Vous feriez mieux de l'utiliser
finish()
si vous êtes dansActivity
, ougetActivity().finish()
si vous êtes dans leFragment
.Si vous souhaitez quitter complètement l'application, utilisez:
la source
Un moyen facile et simple de quitter l'application
la source
Nous voulons un code robuste et simple. Cette solution fonctionne sur les anciens appareils et les nouveaux appareils.
la source
Je pense que ce que vous cherchez c'est
la source
la source
Similaire à @MobileMateo, mais à Kotlin
la source
Je ne sais pas si cela est mal vu ou non, mais c'est comme ça que je le fais ...
Étape 1 - J'ai généralement une classe qui contient des méthodes et des variables auxquelles je veux accéder globalement. Dans cet exemple, je l'appellerai la classe "App". Créez une variable d'activité statique dans la classe pour chaque activité de votre application. Créez ensuite une méthode statique appelée "close" qui exécutera la
finish()
méthode sur chacune de ces variables d'activité si elles ne sont PAS nulles . Si vous avez une activité principale / parent, fermez-la en dernier:Étape 2 - dans chacune de vos activités, remplacez les méthodes
onStart()
etonDestroy()
. DansonStart()
, définissez la variable statique de votre classe App sur "this
". DansonDestroy()
, définissez-le surnull
. Par exemple, dans la classe "Activity1":Étape 3 - Lorsque vous souhaitez fermer votre application, appelez simplement
App.close()
de n'importe où. Toutes les activités instanciées seront fermées! Étant donné que vous ne fermez que des activités et ne tuez pas l'application elle-même (comme dans vos exemples), Android est libre de prendre le relais et d'effectuer le nettoyage nécessaire.Encore une fois, je ne sais pas si cela serait mal vu pour une raison quelconque. Si c'est le cas, j'aimerais lire des commentaires sur les raisons pour lesquelles cela est et comment il peut être amélioré!
la source
api>=16
utilisationfinishAffinity()
bien utiliser cette méthode.Quitter une application est-il mal vu? . Passez par ce lien. Cela répond à votre question. Le système supprime une application.
Supposons que vous ayez deux activités A et B. Vous naviguez de A à B. Lorsque vous cliquez sur le bouton de retour, votre activité B est extraite du backstack et détruite. L'activité précédente dans l'activité de pile arrière A prend le focus.
Vous devez laisser au système le soin de décider quand tuer l'application.
vide public
finish()
Appelez cela lorsque votre activité est terminée et doit être fermée.
Supposons que vous ayez de nombreuses activités. vous pouvez utiliser la barre d'action. Cliquez sur l'icône d'accueil pour naviguer vers MainActivity de votre application. Dans MainActivity, cliquez sur le bouton Retour pour quitter l'application.
la source
Pour quitter votre application, vous pouvez utiliser les éléments suivants:
Pour arrêter également les services, appelez également la méthode suivante:
la source
Cela peut être très tard et selon les directives, vous n'êtes pas censé gérer le processus du cycle de vie par vous-même (comme le système d'exploitation le fait pour vous). Une suggestion serait d'enregistrer un récepteur de diffusion dans toutes vos activités avec "
finish()
" dans leuronReceive()
& chaque fois que vous souhaitez quitter, vous pouvez simplement transmettre une intention indiquant que toutes les activités doivent s'arrêter ..... Bien que assurez-vous que vous le faites " désenregistrer "le récepteur dans vosonDestroy()
méthodes.la source
Ce n'est pas une bonne décision, car c'est contraire aux principes de traitement des applications d'Android. Android ne tue aucun processus sauf s'il est absolument inévitable. Cela permet aux applications de démarrer plus rapidement, car elles sont toujours conservées en mémoire. Vous avez donc besoin d'une raison très spéciale pour tuer le processus de votre application.
la source
La solution correcte et exacte pour quitter l'application en cliquant sur le bouton utilise le code ci-dessous:
// Événement enfoncé On Button Back
la source
Si vous utilisez Kotlin, la bonne façon de quitter l'application et l'alternative à
System.exit()
est une méthode intégréeConsultez la documentation .
Le nombre en
0
tant que paramètre signifie que la sortie est prévue et qu'aucune erreur ne s'est produite.la source
Cela tuera n'importe quoi;)
la source
Essaye ça
la source
Le moyen le plus simple que j'ai trouvé pour quitter une application d'une activité, sans casser la logique d'Android et sans ajouter plus de code dans les activités existantes et en passant les extras est le suivant:
l'
QuitApplicationActivity
être:la source
La réponse de @Sivi ferme l'application. Mais au retour, si vous avez des activités pour les enfants, une autre activité inachevée peut être ouverte. J'ai ajouté
noHistory:true
à mes activités pour que l'application au retour commence à partir de MainActivity.la source
Juste pour en ajouter une à la liste des méthodes brutales de résiliation d'une application:
Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);
la source
Process.killProcess(Process.myPid())
fait de même, mais est plus courtvous pouvez quitter vos applications complètes. Donc
cela fonctionnera à 100%. Bonne chance!
la source
Utilisez simplement finish () sur la touche retour, appuyez sur la touche ()
la source