122 votes

Comment quitter une application Android de manière programmatique ?

Je suis sûr que cette question a été posée plusieurs fois car j'en ai lu quelques-unes. Mon client veut que je mette dans son application un bouton sur lequel les utilisateurs peuvent cliquer pour sortir. J'ai lu este et a trouvé un appel finish() le fera. Mais, la fin n'est que la fermeture de l'activité en cours, n'est-ce pas ? J'ai beaucoup d'activités, donc dans ce cas, je dois passer chaque instance d'activité et les terminer ou transformer chaque activité en modèle Singleton.

J'ai aussi appris à connaître Activity.moveTaskToBack(true) peut vous faire accéder à l'écran d'accueil. OK, il ne s'agit pas de fermer mais de mettre en arrière-plan le processus. Alors, c'est efficace ?

Quelle méthode dois-je utiliser pour fermer complètement l'application ? Une des méthodes décrites ci-dessus ou une autre méthode/une autre utilisation des méthodes ci-dessus ?

98voto

La méthode finishAffinity, publiée dans l'API 16, met fin à toutes les activités en cours et ferme l'application :

this.finishAffinity();

Terminez cette activité ainsi que toutes les activités immédiatement inférieures dans la tâche actuelle qui ont la même affinité. Ceci est généralement utilisé lorsqu'une application peut être lancée sur une autre tâche (par exemple à partir d'une ACTION_VIEW d'un type de contenu qu'elle comprend) et que l'utilisateur a utilisé la navigation vers le haut pour sortir de la tâche actuelle et entrer dans sa propre tâche. Dans ce cas, si l'utilisateur a utilisé la navigation vers le bas pour accéder à 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 livrer des résultats à l'activité précédente, et une exception sera levée si vous essayez de le faire.

Depuis l'API 21, vous pouvez utiliser :

finishAndRemoveTask();

Termine toutes les activités de cette tâche et la supprime de la liste des tâches récentes.

Alternatives :

getActivity().finish();
System.exit(0);

int pid = android.os.Process.myPid();
android.os.Process.killProcess(pid);

Process.sendSignal(Process.myPid(), Process.SIGNAL_KILL);

Intent i = new Intent(context, LoginActivity.class);
i.putExtra(EXTRA_EXIT, true);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
context.startActivity(i);

Fuente: Comment quitter une application Android de manière programmatique

J'espère que cela vous aidera ! Bonne chance !

78voto

Fayaz Points 785

En fait, tout le monde cherche à fermer l'application via un événement onclick, quelle que soit l'activité...

Ajoutez ce code à un événement onclick :

Intent homeIntent = new Intent(Intent.ACTION_MAIN);
    homeIntent.addCategory( Intent.CATEGORY_HOME );
    homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);  
    startActivity(homeIntent);

49voto

Anchit Mittal Points 3285

Vous pouvez appeler System.exit() ; pour sortir de toutes les activités.

    submit=(Button)findViewById(R.id.submit);

            submit.setOnClickListener(new OnClickListener() {

                @Override
                public void onClick(View arg0) {
android.os.Process.killProcess(android.os.Process.myPid());
                    System.exit(1);

                }
            });

48voto

Pir Fahim Shah Points 1786

Si vous voulez sortir de votre application, utilisez ce code dans l'événement "bouton enfoncé" :

public void onBackPressed() {
  moveTaskToBack(true);
  android.os.Process.killProcess(android.os.Process.myPid());
  System.exit(1);
}

26voto

Aditya Points 106
 @Override
    public void onBackPressed() {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
        alertDialogBuilder.setTitle("Exit Application?");
        alertDialogBuilder
                .setMessage("Click yes to exit!")
                .setCancelable(false)
                .setPositiveButton("Yes",
                        new DialogInterface.OnClickListener() {
                            public void onClick(DialogInterface dialog, int id) {
                                moveTaskToBack(true);
                                android.os.Process.killProcess(android.os.Process.myPid());
                                System.exit(1);
                            }
                        })

                .setNegativeButton("No", new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int id) {

                        dialog.cancel();
                    }
                });

        AlertDialog alertDialog = alertDialogBuilder.create();
        alertDialog.show();
    }

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