CloseButtonをクリックすると、Androidアプリケーションを強制停止します。これが私のコードです。
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();
}
});
}
これでアプリケーションが終了しました。 Settings -> Applications -> Manage applications -> <my application name>
、「強制停止」ボタンが有効になっていることがわかります。これは、アプリケーションが完全に停止しなかったことを意味しますか?
Androidアプリケーションを完全に終了し、[設定]の[強制停止]ボタンを無効にするにはどうすればよいですか?限られた経験から、アプリケーションで '例外'(例:NullPointerException)異常停止し、完全に終了したように見え、「強制停止」ボタンが無効になっているように見えます。
別の方法は
_Android.os.Process.killProcess(Android.os.Process.myPid());
_
これらの呼び出しをonDestroy()
に入れれば、これを行うのはそれほど悪いことではないと思います。 (イベント処理の途中でプロセスを強制終了すると、すべての種類の悪いことが起こります(タッチフォーカスがエーテルに入るなど)。
それでも、ベストプラクティスから逸脱するには説得力のある理由が必要です。それは、finish()
を呼び出して、必要に応じて/必要に応じてOSにプロセスを強制終了させることです。
注:これはアプリ全体を強制終了するわけではありませんが、アプリのすべてのアクティビティを終了する場合は、これが最適なオプションです。
finishAffinity();
ActivityCompat.finishAffinity(Activity activity)
お役に立てれば
アプリケーションを強制終了する悪い方法はSystem.exit(0)
です
編集:私はいくつかの説明を借りていると信じています。 Androidは独自にアプリケーションのライフサイクルを処理します。あなたはそれを 'ForceClose'することは想定されていません。それを行う良い方法はわかりません。バックグラウンドで生きているため、ユーザーが再度起動すると、すぐにポップアップします。
私はそれが遅い返信であることを知っています、これが誰かの助けになることを願っています。
スニペットでfinishAndRemoveTasks();
の代わりにfinish();
を試すことができます。
これにより、アプリケーションのすべてのアクティビティとすべてのプロセスが強制終了され、タスクマネージャーから最近のアプリが削除されます。
注:何らかの種類のhandler
またはthread
をコードで使用している場合は、その機能を削除し、NullPointer Exception
またはResourceNotFound Exception
が発生しない場合は上記の推奨コードを使用してください。
ActivityManagerにシェル呼び出しを行わないのはなぜですか?
try {
Runtime.getRuntime().exec("am force-stop com.me.myapp");
} catch (IOException e) {
e.printStackTrace();
}