2

私はかなり単純であるべきことをやろうとしています。

さまざまなオプションを提供する画面で 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() )。

これが発生した場合、すべてのゲームは完全な状態を保存しますか? 驚かれるかもしれませんが、そうかもしれません。

4

1 に答える 1

3

戻るボタンが押されても、アクティビティが完全に破棄されることはありません。Androidは、実行中のアクティビティのスタックを維持します。ユーザーが戻るボタンを押すと、現在のアクティビティがスタックからポップされ、前のアクティビティが表示されます。しかし、ポップオフされたアクティビティは破棄されず、メモリ内に残ります。システムのメモリが不足した場合にのみ破棄され、そのときにのみonDestroy() 呼び出されます。

ユーザーが押し返したためにアクティビティが画面から消える前に、Androidはアクティビティのいくつかのメソッドを呼び出します。ここで、その状態を保存し、ユーザーが再びアクティビティに移動したときに復元できます。ここでアクティビティライフサイクルのドキュメントとサンプルを確認してください:http://developer.android.com/reference/android/app/Activity.html

したがって、onPause()またはonStopped()メソッドのいずれかでゲームアクティビティの状態を保存します。メインメニューで、ユーザーが[再開]を選択した場合は、保存した状態からゲームアクティビティを開始します。それ以外の場合は、ユーザーが[新しいゲーム]を選択した場合は、ゲームアクティビティを最初から開始します。 。

于 2012-08-10T16:35:34.200 に答える