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é.
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.
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.
Pourquoi ne pas faire un appel shell à ActivityManager?
try {
Runtime.getRuntime().exec("am force-stop com.me.myapp");
} catch (IOException e) {
e.printStackTrace();
}