Androidアクティビティのスタック管理方法は何ですか?
アンドロイド内のアクティビティスタック管理は、以下の方法で実現できます。
- 新しいActivityを起動する際にIntentフラグを使用することで、Activityの起動モードを指定することができます。よく使用される起動モードには以下のものがあります:
- 毎回Activityを起動すると、新しいインスタンスが作成され、スタックのトップに置かれます。
- SingleTop: もしスタックの一番上に同じタイプのActivityインスタンスが既に存在している場合、新しいインスタンスを作成せずに、スタックの一番上にあるインスタンスを前面に表示します。
- SingleTask: スタックに同じタイプのActivityインスタンスがすでに存在する場合、それより上にあるすべてのActivityインスタンスを削除し、そのActivityインスタンスをフォアグラウンドに切り替えます。
- SingleInstance:このActivityのインスタンスは1つのスタックのみを占有し、他のActivityのインスタンスとは共有しません。SingleInstanceタイプのActivityを起動すると、新しいスタックが作成され、そのActivityのインスタンスがスタックのトップに配置されます。
- アクティビティの taskAffinity プロパティを設定することで、アクティビティがどのタスクスタックに属するかを指定できます。異なるタスクスタックのアクティビティは、startActivity() メソッドを呼び出すことで切り替えることができます。タスクスタックを管理するためには、次の方法を使用することができます。
- launchMode:AndroidManifest.xmlファイルでActivityのlaunchMode属性を設定することで、Activityの起動モードを指定できます。よく使われる起動モードには、standard、singleTop、singleTask、singleInstanceがあります。
- タスクスタックビルダー:TaskStackBuilderクラスを使用して、タスクスタックを作成し、複数のActivityをタスクスタックに追加し、PendingIntentを使用してタスクスタック全体を起動することができます。
- Activityのライフサイクルメソッドを使用すると、Activityスタックを管理することができます。たとえば、onPause()メソッド内では現在のActivityの状態を保存し、onResume()メソッド内で状態を復元することができます。
- ActivityManagerを使用すると、アプリケーションのすべての実行中のActivityを取得し、管理することができます。たとえば、getRunningTasks()メソッドを使用して、実行中のActivityリストを取得し、操作することができます。
要点:AndroidのActivityスタック管理は、Intentフラグ、タスクスタック、Activityライフサイクルメソッド、ActivityManagerなどを使用して実現できます。異なる方法は、異なるシナリオや要件に適しています。