web-dev-qa-db-fra.com

Comment quitter une application Android par programme?

Je suis sûr que cette question a été posée à plusieurs reprises car j'en ai lu quelques-unes. Mon client veut que je mette un bouton dans son application où les utilisateurs peuvent cliquer et quitter. J'ai lu ceci et j'ai trouvé l'appelant finish() le fera. Mais finir ne fait que fermer l'activité courante en cours, n'est-ce pas? J'ai beaucoup d'activités alors dans ce cas je dois passer chaque instance d'activité et les terminer ou transformer chaque activité en motif Singleton. 

J'ai aussi appris à connaître Activity.moveTaskToBack(true) qui peut vous permettre d'accéder à l'écran d'accueil. OK, cela ne ferme pas mais met en arrière-plan le processus. Alors est-ce efficace?

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

52
Yohan Weerasinghe

En fait, tout le monde cherche à fermer l'application sur un événement onclick, où que ce soit une activité .... 

Alors les gars amis essaient ce code. Mettez ce code sur l'événement onclick 

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

Vous pouvez appeler System.exit (); 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);

                }
            });
39
Anchit Mittal

Si vous souhaitez quitter votre application, utilisez ce code dans l'événement de votre bouton:

public void onBackPressed() {
  moveTaskToBack(true);
  Android.os.Process.killProcess(Android.os.Process.myPid());
  System.exit(1);
}
29
Pir Fahim Shah
 @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();
    }
19
Aditya_Android

C'est trop facile. Utilisez System.exit(0);

17
Amon Olimov

Il y a deux situations possibles:

  1. Vous voudrez peut-être quitter l'activité
  2. Ou vous voulez quitter l'application

Vous pouvez quitter l'activité en utilisant le code suivant:

var intent = new Intent(Intent.ActionMain);
intent.AddCategory(Intent.CategoryHome);
intent.SetFlags(ActivityFlags.NewTask);
startActivity(intent);
finish();

Mais cela ne supprimera pas les activités sous-jacentes dans la même application ..__ Ceci minimisera simplement l'application.

Si vous souhaitez quitter l'application, utilisez le code suivant pour mettre fin à son processus:

Android.os.Process.killProcess(Android.os.Process.myPid()); 

pour le développement mono, utilisez simplement 

process.KillProcess(Process.MyPid());
11
Kasun

Depuis api 16, vous pouvez utiliser la méthode finishAffinity, qui semble être sur le point de fermer toutes les activités associées par son nom et sa description javadoc:

this.finishAffinity();

Terminez cette activité ainsi que toutes les activités immédiatement inférieures à celle-ci dans la tâche en cours ayant la même affinité. Cela est généralement utilisé lorsqu'une application peut être lancée sur une autre tâche (par exemple à partir d'un ACTION_VIEW d'un type de contenu qu'elle comprend) et que l'utilisateur a utilisé la navigation vers le haut pour passer de la tâche en cours à sa propre tâche. Dans ce cas, si l'utilisateur a accédé à une autre activité de la deuxième application, toutes ces activités doivent être supprimées de la tâche d'origine dans le cadre du commutateur de tâches. 

Notez que cette fin ne vous permet pas de fournir des résultats à l'activité précédente, et une exception sera levée si vous essayez de le faire.


Depuis api 21 vous pouvez utiliser une commande très similaire

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);

Source: Comment quitter une application Android par programme


J'espère que ça aide! Bonne chance!

7
Shreshth Kharbanda
Android.os.Process.killProcess(Android.os.Process.myPid());
5
kathir

Que diriez-vous de this.finishAffinity()

De la docs,

Terminez cette activité ainsi que toutes les activités immédiatement inférieures à celle-ci dans la tâche en cours ayant la même affinité. Cela est généralement utilisé lorsqu'une application peut être lancée sur une autre tâche (par exemple à partir d'un ACTION_VIEW d'un type de contenu qu'elle comprend) et que l'utilisateur a utilisé la navigation vers le haut pour passer de la tâche en cours à sa propre tâche. Dans ce cas, si l'utilisateur a accédé à d'autres activités de la deuxième application, elles doivent toutes être supprimées de la tâche d'origine dans le cadre du commutateur de tâches . Notez que cette fin ne vous permet pas de fournir des résultats à l'activité précédente, et une exception sera levée si vous essayez de le faire.

4
Akeshwar Jha

Utilisez this.finishAffinity (); sur ce bouton au lieu de finish (); Si cela ne fonctionne pas, vous pouvez également essayer en ajoutant Android: noHistory = "true" dans votre manifeste, puis terminez votre activité en uisng finish (); ou finishAffinity ();

J'espère que ça aide....:)

3
Yesha Shah
 @Override
    public void onBackPressed() {
        Intent homeIntent = new Intent(Intent.ACTION_MAIN);
        homeIntent.addCategory( Intent.CATEGORY_HOME );
        homeIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
        startActivity(homeIntent);
    }
3
azeem khan

Essayez ceci sur un appel. Je l'utilise parfois dans onClick d'un bouton.

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

Au lieu de fermer votre application, le tableau de bord s'ouvre, vous donnant l'impression que votre application est fermée.

lisez cette question pour plus de clarté Android - code d'application de sortie

2
Rishiraj Purohit

Atteindre dans Xamarin.Android:

    public override void OnBackPressed()
    {
        MoveTaskToBack(true);
        Process.KillProcess(Process.MyPid());
        Environment.Exit(1);
    }
2
GONeale

cela effacera la tâche (pile d'activités) et commencera une nouvelle tâche 

Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
System.exit(1);
2
Mahmood Ali

Cela fonctionne en utilisant seulement moveTaskToBack(true);

1
user3856297

mettez celui-ci dans votre onClic:

moveTaskToBack(true);
    finish()
1
Stan Malcolm

activité fantôme appelée avec singletop et finish () sur onCreate devrait faire l'affaire

1
JesusS

Si quelqu'un se demande encore, pour Xamarin.Android (dans mon cas, Monogame tourne aussi), la commande FinishAndRemoveTask() sur Activity fait très bien l'affaire!

0
Konrad

Au lieu de System.exit (1), utilisez simplement System.exit (0) 

0
Kaze Tdr

Si vous utilisez les deux finition et quitter votre application se ferme complètement 

terminer();

System.exit (0);

0
Abdullah alkış

il suffit d'utiliser le code dans votre backpress

                    Intent startMain = new Intent(Intent.ACTION_MAIN);
                    startMain.addCategory(Intent.CATEGORY_HOME);
                    startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                    startActivity(startMain);
0
Sayooj

Si vous utilisez EventBus (ou toute autre bibliothèque pub/sub) dans votre application pour communiquer entre les activités, vous pouvez leur envoyer un événement explicite:

final public class KillItWithFireEvent
{
    public KillItWithFireEvent() {}

    public static void send()
    {
        EventBus.getDefault().post(new KillItWithFireEvent());
    }
}

Le seul inconvénient est que vous avez besoin de toutes les activités pour écouter cet événement et appeler leur propre finish(). Pour cela, vous pouvez facilement créer des classes d'activité shim par héritage, qui écoutent simplement cet événement et permettent aux sous-classes de tout mettre en œuvre, puis assurez-vous que toutes vos activités héritent de cette couche supplémentaire. Les écouteurs de Kill pourraient même ajouter des fonctionnalités supplémentaires par le biais de substitutions, comme éviter la mort dans certaines situations particulières.

dans le fragment

getActivity (). finishAndRemoveTask ();

dans l'activité

finishAndRemoveTask ();

0
Rodrigo Givisiez
Just call these two Function

 finish();
 moveTaskToBack(true);
0
younes

il suffit d'ajouter ce code: -

@Override
    public void onBackPressed() {
        finish();
        super.onBackPressed();
    }
0
Sandeep Malik

Il suffit d’exécuter les deux lignes ci-dessous pour quitter l’application.

Android.os.Process.killProcess(Android.os.Process.myPid());
System.exit(1);
0
Hassnain Jamil