Activityの4種類の起動モードの説明

1636 ワード

1,standard標準モード:
Activityを起動するたびにインスタンスが再作成されます.つまり、Activityの作成時のライフサイクルメソッドonCreate、onStart、onResumeが呼び出されます.起動されたActivityは起動されたActivityのタスクスタックに自動的に追加されるため、StandardモードのActivityをApplicationContextで起動するとエラーが表示されます(Contextにはいわゆるタスクスタックはありません)
2,singleTopスタックトップ多重モード:
新しく起動するActivityはすでにタスクスタックのスタックトップにあるので、このActivityは再構築されず、onNewIntentメソッドがコールバックされ、新しく起動したActivityがスタックトップにない場合、新しいActivityインスタンスが再作成されスタックトップに追加する.
3,singleTaskスタック内多重モード:
これは、起動されたActivityがスタック内にある限り、スタックの上部にあるかどうかにかかわらず、新しいActivityインスタンスを再作成するのではなく、スタックの上部に直接戻り、onNewIntentメソッドをコールバックし、他のActivityがある場合にスタック処理を行う簡単な単一のモードです.
4,singleInstanceシングルインスタンスモード:
これは強化されたsingleTaskモードであり、singleTaskの特徴に加えて、このモードのActivityは単独で独立したタスクスタックに位置し、例えばActivity AはsingleInstance起動モードであり、A起動後、システムは単独でタスクスタックを構築し、Aは単独でこのタスクスタックに位置し、以降の要求はこのタスクスタックが破壊されるまで新しいActivityを作成しない.
タスクスタックの指定:
Android Menifestで設定
  Activity 
android:taskAffinityラベルはスタック名を設定し、このラベルはsingleTask起動モードのActivityとandriod:allowTaskReparentingに合わせて使用される2つの場合にのみ機能します.
allowTaskReparentingがtureの場合、アプリケーションAがアプリケーションBのActivityを起動し、アプリケーションBも起動すると、このActivityはアプリケーションAのタスクスタックからアプリケーションBのタスクスタックに直接移行する
Activity起動モードは、再コードで設定することもできます.
Intent intent = new Intent();
        intent.setClass(this,TestActivity.class);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(intent);
コード設定はインベントリファイル設定より優先されます