■finish()
アクティビティを閉じる際の最良の終了方法。
この方法は現在開いているアクティビティを閉じて一つ前のアクティビティに移動します。
バックボタンを押した時と同じ動きで、実行すると onPause(), onDestroy()が順番に呼ばれる。
復帰時は新規生成となり onCreate(), onStart(), onResume() の順でイベントが発生する。
finish()を宣言する前にIntentを追加することによって一つ前ではなく、移動したいアクティビティへ飛ぶこともできます。
しかし、この方法ではアプリケーション全体を終了することはできません。
■moveTaskToBack (boolean nonRoot)
アプリケーション全体を終了する際の推奨される終了方法。
ただし、アプリケーションを中断状態にするので終了といっても完全に落とす訳ではありません。
引数に false を指定した場合、アプリケーションの開始アクティビティ以外のアクティビティでは機能しません。
通常は引数にtrueを指定して呼び出す。
動きとしては、ホームボタンを押した時と同じ動きで、実行するとonPause()が発生し、次の再開までバックグラウンドで待機します。
メモリ不足になった場合、OSから自動的にonDestroy()を発生させてすべてのタスクを終了させます。
その前に呼び出した場合は最後のアクティビティから再開し、onRestart(), onStart(), onResume() の順で再開します。
■Process.killProcess(int pid)
Process.myPid ()を引数に与えると現在のプロセスを強制終了する。
これを呼び出すと、finish()と同じくそのアクティビティを終了しますが、Activityのすべてのライフサイクルを無視して強制的に落とします。
なので通常はfinish()が推奨されます。
※私の環境ではなぜか使えませんでした・・・
■System.exit(int)
実行中のプロセスを強制終了します。
引数にはRESULT_OKを入れます。
android.os.Process.killProcess(Process.myPid()) と同じような動作になりますが、安全性は保障できないのであまり使用はオススメできません。
たまーーに強制終了はしたけどプロセスが残ってる!?ってなこともあるようで・・・・
しかし、どのような状態でも強制的に落とすことができます。(エラーも無視して・・・w)