web-dev-qa-db-fra.com

Comment forcer l'arrêt de mon application Android par programme?

Je voudrais forcer l'arrêt de mon application Android lorsque je clique sur closeButton. Ceci est mon code.

protected void onCreate(Bundle savedInstanceState) {

  this.setContentView(R.layout.layoutxml);

  this.closeButton = (Button)this.findViewById(R.id.close);

  this.closeButton.setOnClickListener(new OnClickListener() {

    @Override

    public void onClick(View v) {

      finish();

    }

  });

}

Ceci termine mon application. Si je vais à Settings -> Applications -> Manage applications -> <my application name>, je peux voir que le bouton 'Forcer l'arrêt' est activé. Est-ce que cela signifie que mon application n'a pas été complètement arrêtée?

Comment terminer complètement mon application Android et désactiver le bouton "Forcer l'arrêt" dans les "Paramètres"? D'après mon expérience limitée, lorsqu'une "Exception" (par exemple, NullPointerException) se produit dans l'application, celle-ci s'arrête de manière anormale, semble avoir complètement fini et le bouton "Forcer l'arrêt" semble désactivé.

20
user573566

Une autre façon est

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

Je ne pense pas que ce soit si mauvais de faire cela, à condition que vous mettiez ces appels dans onDestroy(). (Si vous tuez votre processus au milieu de la gestion des événements, toutes sortes de mauvaises choses, comme le focus tactile dans l’éther, peuvent se produire.)

Néanmoins, vous avez besoin d'une raison impérieuse pour vous écarter de la meilleure pratique, qui consiste simplement à appeler finish() et à laisser le système d'exploitation s'occuper de mettre fin à votre processus, le cas échéant.

36
Ted Hopp

System.exit(0) serait un mauvais moyen de tuer l'application

Edit: Je crois que je dois une explication. Android gère lui-même le cycle de vie des applications, et vous n'êtes pas censé le «forcer», et je ne connais aucun moyen de le faire. En règle générale, son ok si votre application est toujours en vie en arrière-plan, de cette façon si l'utilisateur le relance à nouveau, il apparaîtra rapidement. 

2
m0s

Pourquoi ne pas faire un appel shell à ActivityManager?

try {
      Runtime.getRuntime().exec("am force-stop com.me.myapp");
    } catch (IOException e) {
      e.printStackTrace();
    }
0
user6796473