4 つのアクティビティを持つ単純なアプリを作成しています。私が達成しようとしていることを理解できるように、簡単に説明します。
最初のアクティビティ - MainActivity には、2 つの入力パラメータを収集するいくつかの TextEdit フィールドがあります - 担当者数と一時停止の長さ (秒単位)。ボタンをクリックすると、2 番目のアクティビティである WorkActivity に移動します。「完了」を押すまでカウントを開始し、PauseActivity を呼び出すか、最後の担当者の場合は OverviewActivity を呼び出します。PauseActivity は、次のレップまでの秒数をカウントダウンし、ビープ音を鳴らして時間であることを知らせ、再び WorkActivity を表示します。OverviewActivity は、ワークアウトの合計時間と各担当者の時間を示します。
また、アプリを終了するだけのボタンも備えています。アプリを終了することは、Android アプリケーションのライフ サイクルの哲学に実際には沿っていないことはわかっていますが、それが必要です (または、そのようなことが起こる必要があります)。担当者を追跡し、時間を記録するシングルトン コントローラー クラスがあります。このインスタンスを強制終了できます (または、その死を偽装して新しいインスタンスが作成されます) が、アプリを「閉じて」もう一度クリックすると、期待される MainActivity ではなく、OverviewActivity が取得されます。
System.exit(0) を呼び出すと処理が行われ、アプリケーションがシャットダウンされるだけなので、再度実行するときに新たに初期化する必要があると予想していました。代わりに、全体が本当におかしくなり始めました。System.exit(0) を呼び出すボタンをクリックすると、アプリの再起動が消える代わりに。WorkActivity を表示し、カウントを開始します。完了ボタン (PauseActivity に移動する必要があります) をクリックすると、例外が発生します。アプリケーションがクラッシュし、再び再起動します。これは、ホーム画面のボタンを押すまで繰り返され、アプリケーション マネージャーで強制終了するまで、アプリはこの役に立たない状態のままになります。
また、正確にはわかりませんが、 System.exit(0) 呼び出し (またはその後のクラッシュ) がデバッガーを切断すると思います。これは、後で Eclipse にブレークポイントをヒットさせることができなかったためです。これは、発生する実際の例外を実際に見ることができないことを意味します。
誰かがこれに光を当てることができますか? System.exit(0) を正しく使用する方法はありますか?
このオプションがない場合、これを処理する正しい方法は何でしょうか? 私はアプリが必要です: - 最後の「完了」ボタンのホームボタンまたは戻るボタンをクリックすると、コントローラー (および可能であれば他のすべて) を破棄し、カウントを停止し (タイマーが実行されている場合)、本質的にそれ自体をシャットダウンします。 down) - アプリのアイコンをもう一度クリックすると、MainActivity を含む新しいインスタンス (または新しく表示されるインスタンス) が表示され、既定の状態で他のすべてのアクティビティが表示されます。