2

だから私はこの小さなゲームを開発しています、それは現在2つのアクティビティを使用しています:メニューアクティビティと実際のゲームアクティビティ。ゲームアクティビティはメニューアクティビティによって開始されます(問題はありません)

次に、戻るキーを使用して、ゲームアクティビティからメニューアクティビティに切り替えることができます。

public void onBackPressed() {
    super.onBackPressed();
}

これで、メニューアクティビティに戻りました。私が作成したゲームアクティビティは停止しました(私は推測します)。ゲームアクティビティを終了したまま、ゲームアクティビティに戻るにはどうすればよいですか(再開するにはどうすればよいですか)。

4

3 に答える 3

1

データストレージで説明されている方法のいずれかを使用して、ゲームの状態を手動で保存する必要があります。

ただし、メニューアクティビティの新しいコピーを開始する場合:

Menu Activity ->
    Game Activity ->
        Menu Activity

完全に再構築するのではなく、ゲームアクティビティに戻ることができます。ただし、もちろん、ゲームアクティビティがガベージコレクタによって破棄されないという保証はありません。そのため、ゲームの状態をに保存する必要がありますonPause()

于 2013-01-01T17:53:32.500 に答える
0

メニューを一種の「一時停止」メニューとして使用していて、戻るボタンでゲームを一時停止すると仮定すると、戻るボタンでメニューアクティビティの新しいインテントを作成し、メニューアクティビティの戻るボタンを通常どおり機能させることができます。

もちろん、ユーザーがメニューから画面を閉じることができるため、メニューアクティビティを起動するときにゲームデータを保持する必要がありますが、メニューを起動すると、システムは本質的にゲームアクティビティ(およびデータ)をメモリに保持します。

@Override
public void onBackPressed() {
   Intent intent = new Intent(GameActivity.this, MenuActivity.class);
   startActivity(intent);
}
于 2013-01-01T17:52:16.767 に答える
0

スーパーを呼び出すためだけにメソッドをオーバーライドすることは絶対に無意味です。オーバーライドの意味を再確認してください。オーバーライドしない場合、サブクラスメソッドAはスーパークラスメソッドAと同じになります。したがって、オーバーライドしてサブクラスに異なるバージョンのAを作成できますが、呼び出すことはできません。スーパークラスメソッドA、それは役に立たない。

アクティビティについて、Androidでは、スタックにないアクティビティが保持されることを期待することはできません。これをマニフェストに追加できます:

 <activity name=".GameActivity" 
   ... 
   android:launchMode="singleTop" />

ただし、Androidがアクティビティをクリーンアップし、再起動時に再作成することを保証するものではありません。これが、Androidがリソースを保持する方法です。

ただし、より良い方法は、GameActivity内から(startActivity)MenuActivityを再度呼び出すことです。そうすれば、古いGameActivityは引き続きアクティビティスタックに残ります。しかし実際には、AndroidがGameActivityを再作成するいくつかの制限ケースが常にあります。たとえば、システムがメモリ不足になっている場合です。

最善の方法は、GameActivityの状態を永続化して、新しいインスタンスでも古いインスタンスと同じ状態で再配置されるようにすることです。

于 2013-01-01T17:53:38.810 に答える