私はかなり単純であるべきことをやろうとしています。
さまざまなオプションを提供する画面で StartActivity を起動するゲームがあります。その 1 つが「ゲームの開始」です。
ユーザーがこのオプションを選択すると、次のようなコードで適切なゲームが開始されます。
Intent i = new Intent();
i.setClass(context, GameActivity.class);
context.startActivity(i);
これはすべてうまくいきます。ゲーム中に「戻る」ボタンが押されると、制御はこの StartActivity に戻ります。繰り返しますが、これで問題ありません。
ただし、「戻る」を押すと「onDestroy()」が呼び出されます (ドキュメントに従って)。これは、「ゲームの開始」をもう一度押すと、GameActivity が最初から開始されることを意味します。
私が望むのは、「戻る」が押されたときに GameActivity がメモリに保持され、「ゲームの開始」を押すと中断した場所に戻ることです。
これはほぼすべてのゲームで行われていることなので、実際には非常に簡単である必要がありますが、その方法がわかりません。StartActivity に戻るような方法で onBackPressed() をオーバーロードしようとしましたが、成功しませんでした。次のようなことをしています:
public void onBackPressed() {
Intent i = new Intent(this, StartActivity.class);
startActivity(i);
}
スタックが永遠に成長することを意味します。つまり、A -> B -> A は、A だけでなく ABA を離れます。
一般的なアクティビティ フローを認識しています (http://developer.android.com/reference/android/app/Activity.html)。
GameActivity の起動方法が間違っていますか?
#wingman への回答として、私はさまざまなアクティビティの状態を認識しており、メモリを解放する必要がある場合は onDestroy() が呼び出される可能性が高いことを認識しています。onPause() でゲームの状態を保存し、onResume() でロードしますが、その時点でのメモリの完全な状態ではありません。
「ホーム」を押すと、アプリは実質的に「最小化」され、再起動したときの場所に戻ります- onDestroy() は呼び出されません。この動作をエミュレートしようとしていますが、アプリを「ホーム」ではなく StartActivity に戻します。
ドキュメントから収集できる限り、戻るボタンは常に onDestroy() を呼び出します (または、少なくとも finish() )。
これが発生した場合、すべてのゲームは完全な状態を保存しますか? 驚かれるかもしれませんが、そうかもしれません。