361 votes

Comment quitter une application Android de manière programmatique

J'ai trouvé quelques codes pour quitter une application Android de manière programmatique. En appelant l'un des codes suivants dans onDestroy(), l'application sera-t-elle entièrement abandonnée ?

  1. System.runFinalizersOnExit(true)
    (OR)
  2. 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 de sortie. Veuillez me dire si je peux 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 sous Android ?

0 votes

Il y a déjà tellement de postes ici. stackoverflow.com/search?q=how+to+exit+an+Android+app

3 votes

0 votes

Utilisez 'System.exit(0);' lorsque vous voulez vraiment quitter l'application. Je l'ai fait pour une erreur irrécupérable après avoir montré un message à l'utilisateur. Si vous en avez besoin, vous pouvez même relancer automatiquement l'application en utilisant AlarmManager. Voir : blog.janjonas.net/2010-12-20/…

168voto

Devon Points 134
getActivity().finish();
System.exit(0);

c'est la meilleure façon de sortir de l'application ! !!!

La meilleure solution pour moi.

0 votes

Oui, ça marche très bien ! Il faut l'appeler depuis MainActivity pour que ça marche !

0 votes

Une solution parfaite. Il n'est pas nécessaire de terminer le processus, car Android sait mieux que quiconque gérer la mémoire. Cependant, cette solution permet de terminer l'activité, ainsi que de quitter l'application pour le confort de l'utilisateur.

0 votes

Solution parfaite, vraiment. Elle a résolu beaucoup de problèmes. Merci.

31voto

Nanne Points 35880

Si vous devez tuer l'application, réfléchissez bien : pourquoi ne pas laisser le système d'exploitation décider où et quand libérer les ressources ?

Sinon, si vous êtes absolument sûr de vous, utilisez

finish();

En réaction au commentaire de @dave appleton : La première chose à lire est le grand combo question/réponse que @gabriel a posté : Est-il mal vu d'abandonner une application ?

Maintenant, en supposant que nous avons cela, la question ici a toujours une réponse, étant donné que le code dont vous avez besoin si vous faites quelque chose avec l'abandon est finish() . Bien sûr, vous pouvez avoir plus d'une activité, etc., mais ce n'est pas le sujet. Passons en revue certains des cas d'utilisation.

  1. Vous voulez laisser l'utilisateur tout quitter à cause de l'utilisation de la mémoire et du fait qu'il ne fonctionne pas en arrière-plan ? J'en doute. Laissez l'utilisateur arrêter certaines activités en arrière-plan, mais laissez le système d'exploitation supprimer tous les recours inutiles.
  2. Vous voulez qu'un utilisateur n'aille pas à l'activité précédente de votre application ? Alors, soit vous le configurez pour qu'il ne le fasse pas, soit vous avez besoin d'une option supplémentaire. Si, la plupart du temps, l'option back=activité précédente fonctionne, l'utilisateur ne va-t-il pas simplement appuyer sur home s'il veut faire autre chose ?
  3. Si vous avez besoin d'une sorte de réinitialisation, vous pouvez savoir si/comment/etc. votre application a été quittée, et si votre activité reçoit à nouveau le focus, vous pouvez agir en conséquence, en affichant un nouvel écran au lieu de redémarrer là où vous étiez.

Donc à la fin, bien sûr, finish() ne tue pas tout, mais c'est quand même l'outil dont vous avez besoin je pense. S'il y a un cas d'utilisation pour "tuer toutes les activités", je ne l'ai pas encore trouvé.

34 votes

Appel à finish() ne tuera pas l'application. finish() est utilisé en permanence : Call this when your activity is done and should be closed. C'est le même effet que d'appuyer sur le bouton "retour".

0 votes

Finish va tuer l'activité. En quoi est-ce différent de tuer l'application ?

0 votes

Il n'y a rien de mal à "finir" ou à "tuer" la Activity (pas le Application ). Par exemple, vous pouvez lancer une nouvelle activité pour montrer des informations à l'utilisateur. Après un délai d'attente ou une pression sur "OK", vous pourriez appeler finish() pour revenir à l'activité d'appel.

20voto

sunghun Points 355

Je pense que cette application devrait être tuée dans certains cas. Par exemple, il y a une application qui ne peut être utilisée qu'après la connexion. L'activité de connexion a deux boutons, 'login' et 'cancel'. Lorsque vous cliquez sur le bouton "Annuler", cela signifie définitivement "Terminer l'application". Personne ne veut que l'application soit active en arrière-plan. Je suis donc d'accord pour dire que dans certains cas, il faut arrêter l'application.

3 votes

Je suis tout à fait d'accord avec ce cas d'utilisation. Considérez également mon application sécurisée qui doit être disponible à un certain endroit et qui doit faire de son mieux pour se fermer si l'utilisateur ne se trouve pas à cet endroit. Que dois-je faire ?

19voto

san Points 143

Il n'est pas possible de quitter une application sous Android , SampleActivity.this.finish() ; terminera l'activité en cours.

Lorsque vous passez d'une activité à une autre, gardez la précédente terminée.

Intent homeintent = new Intent(SampleActivity.this,SecondActivity.class);
startActivity(homeintent);
SampleActivity.this.finish();

5voto

Jabari Points 902

Je ne suis pas sûr si c'est mal vu ou pas, mais c'est la façon dont je le fais...

Étape 1 - habituellement, j'ai une classe qui contient des méthodes et des variables que je veux accéder à l'échelle mondiale. Dans cet exemple, je vais l'appeler l ' "Application" de la classe. Créer statique variable à l'intérieur de la classe pour chaque activité de votre application. Puis créer une méthode statique qui s'appelle "fermer" qui sera exécutée à l' finish() méthode sur chacune de ces variables d'Activité si elles ne sont PAS nulles. Si vous avez un principal/activité parent, fermez-la dernière:

public class App
{
    ////////////////////////////////////////////////////////////////
    // INSTANTIATED ACTIVITY VARIABLES
    ////////////////////////////////////////////////////////////////

        public static Activity activity1;
        public static Activity activity2;
        public static Activity activity3;

    ////////////////////////////////////////////////////////////////
    // CLOSE APP METHOD
    ////////////////////////////////////////////////////////////////

        public static void close()
        {
            if (App.activity3 != null) {App.activity3.finish();}
            if (App.activity2 != null) {App.activity2.finish();}
            if (App.activity1 != null) {App.activity1.finish();}
        }
}

Étape 2 - dans chacune de vos activités, remplacer l' onStart() et onDestroy() méthodes. En onStart(), définissez la variable statique dans votre classe App égal à "this". En onDestroy(), définissez égal à null. Par exemple, dans le "Activity1" de la classe:

@Override
public void onStart()
{
    // RUN SUPER | REGISTER ACTIVITY AS INSTANTIATED IN APP CLASS

        super.onStart();
        App.activity1 = this;
}

@Override
public void onDestroy()
{
    // RUN SUPER | REGISTER ACTIVITY AS NULL IN APP CLASS

        super.onDestroy();
        App.activity1 = null;
}

Étape 3 - Lorsque vous souhaitez fermer votre application, il suffit de téléphoner App.close() à partir de n'importe où. Tous les instancié activités à proximité! Puisque vous êtes seulement des activités de clôture et de ne pas tuer l'application elle-même (comme dans votre exemple), Android est libre de prendre le relais et faire du nettoyage nécessaire.

Encore une fois, je ne sais pas si ce serait mal vu pour une raison quelconque. Si oui, je serais ravi de lire les commentaires sur pourquoi il est et comment il peut être amélioré!

4 votes

En gardant une référence à votre activité, vous faites perdre de la mémoire ! Voir este pour une discussion approfondie.

0 votes

@Managarm La prémisse derrière ce post est que la variable statique restera même après que le processus (dans ce cas, l'activité) ait été détruit. Si le ménage est fait correctement, ce n'est pas un problème... d'où la raison pour laquelle j'annule la référence dans la méthode onDestroy() de l'activité.

0 votes

@Jabari Ah, j'ai manqué la partie onDestroy. Dans ce cas, cela ne devrait pas être un problème, bien que ce ne soit pas une bonne pratique.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X