私は自分の問題について長い間解決策を探してきましたが、Android のドキュメントはあまり明確ではなく、Web ソリューションは完全には機能しません。
メインのアクティビティ (ゲームが行われる場所) が別の単純なアクティビティを呼び出して戻ることができるゲームを開発しています。次のように機能します。
- ユーザーがホームボタンをクリックしてからゲームに戻った場合、アクティビティを停止し、onDestroy を渡さずに再開する必要があります (そうしないと、ゲームの状態が失われます)。
- メインのアクティビティが他のアクティビティを呼び出してからゲームに戻る場合と同じ関数。
- ユーザーが終了ボタンを押すと、ゲームは完全に終了する必要があります
android:launchMode="singleTask"
最初の 2つの点については、メイン アクティビティが 1 つだけ作成されて呼び出されることを確認するために、これを試してみましたandroid:launchMode="singleTop"
。
問題は次のとおりだと思います。すでにスタックの一番上にあります!)。逆に、singleTask はアクティビティがそのスタック内で一意であることを保証しますが、ユーザーが [ホーム] ボタンをクリックしてアプリケーションに戻った後、他のタスクが呼び出されます。
とにかく、これはスマートな解決策ですか、それともゲームの状態を onStop/onPause に保存してから、onResume で再開する必要がありますか?
3 番目のポイントでは、すべてのアクティビティに を追加しようとしましたandroid:noHistory="true"
。次に、ユーザーが終了ボタンをクリックするとfinish()
、onCreate のメソッドだけを実行する新しいアクティビティを呼び出します。このアクティビティは with で呼び出されintent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_NEW_TASK);
、その launchMode は ですが、そうではsingleInstance
ありません。うまくいかない場合は、常にメインのアクティビティに戻るだけです。