起動モードの話をする
2107 ワード
なぜ起動モードが必要なのか
Androidシステムはタスクスタックの構造を用いてActivityの例を格納し,スタック構造は先進的な実行原則に従うことが知られている.そのため、ロールバックキーを押すと前のページが飛び出し、このタスクスタックに格納されているActivityインスタンスがスタックからポップアップされると、携帯電話のデスクトップに戻ります.多くのQAたちはテスト中に問題を発見すると信じています.ページのボタンをすばやくクリックすると、いくつかの2次ページが開きます.これがActivityのデフォルトの起動モードが働いています.
起動モード standard(標準モードであり、デフォルトモードでもある) singleTop(スタックトップ多重) singleTask(スタック内多重) singleInstance(シングルインスタンスモード) 特長
1.standard
Activityを起動するたびに、新しいインスタンスが作成されます.このモードでは、誰が起動したのかという原則に従い、このインスタンスは彼を起動したActivityがあるスタックに追加されます.あなたが1のActivityを適用していることは理解できます.Aでアプリケーション2のActivity_を起動しましたC,アプリケーション2を開くとアプリケーション2の起動ページActivity_に入りますBは、アプリケーション2のActivity_ではなくC;
2.singleTask
Activity_などのActivityを起動するたびにA、まずこのActivityを探しに行きます.A目的のタスクスタック(アプリケーションのActivityはデフォルトで自分のアプリケーションのタスクスタックで実行されますが、後で詳しく説明します)が存在しない場合は、タスクスタックを作成してActivity_を作成します.Aインスタンスはスタックに組み込まれる.希望するタスクスタックが存在し、スタック内にこのActivity_がある場合Aのインスタンスは多重化され、スタック内のインスタンス以上の他のActivityインスタンスがスタックから順次ポップアップされると、起動するActivity_Aはスタックの頂上に戻ってonNewIntentを呼び出します.スタック内のインスタンスが存在しない場合は、インスタンスを作成し、スタックに押し込みます.
3.singleTop
このモードはsingleTaskと似ています.たとえば、現在起動する必要があるActivity_Aがタスクスタックのスタックトップにある場合、このActivity_を多重化するAのインスタンスを呼び出し、そのonNewIntentを呼び出します.起動するActivity_が必要な場合Aのインスタンスがスタックトップにない場合、スタックではインスタンスを再作成してスタックに押し込む必要があります.
4.singleInstance
この起動モードは比較的特殊である.singleTaskのすべての特性に加えて、この起動モードのActivityは1つのタスクスタック内に単独でしか存在しないことが顕著な特徴である.システムは、新しい個別のタスクスタックを割り当て、このActivityのインスタンスはスタック内で独自に実行されます.
TaskAffinity
TaskAffinityは、通常、アプリケーションのすべてのActivityのタスクスタック名がデフォルトでパッケージ名であるため、このパラメータの宣言をAndroid Manifestファイルに表示しません.このパラメータは一般的にSingleTaskモードに適しており、この起動モードのActivityがどのタスクスタックで実行されるべきかを識別するために、ペアで使用するとより効果的です.
使用 AndroidManifestファイルに と記載コード動的設定
シミュレーションテストの過程でadb shell dumpsys activitiesコマンドを使用して、タスクスタックおよびそのactivityインスタンスを表示して、自分の推測を検証できます.
Androidシステムはタスクスタックの構造を用いてActivityの例を格納し,スタック構造は先進的な実行原則に従うことが知られている.そのため、ロールバックキーを押すと前のページが飛び出し、このタスクスタックに格納されているActivityインスタンスがスタックからポップアップされると、携帯電話のデスクトップに戻ります.多くのQAたちはテスト中に問題を発見すると信じています.ページのボタンをすばやくクリックすると、いくつかの2次ページが開きます.これがActivityのデフォルトの起動モードが働いています.
起動モード
1.standard
Activityを起動するたびに、新しいインスタンスが作成されます.このモードでは、誰が起動したのかという原則に従い、このインスタンスは彼を起動したActivityがあるスタックに追加されます.あなたが1のActivityを適用していることは理解できます.Aでアプリケーション2のActivity_を起動しましたC,アプリケーション2を開くとアプリケーション2の起動ページActivity_に入りますBは、アプリケーション2のActivity_ではなくC;
2.singleTask
Activity_などのActivityを起動するたびにA、まずこのActivityを探しに行きます.A目的のタスクスタック(アプリケーションのActivityはデフォルトで自分のアプリケーションのタスクスタックで実行されますが、後で詳しく説明します)が存在しない場合は、タスクスタックを作成してActivity_を作成します.Aインスタンスはスタックに組み込まれる.希望するタスクスタックが存在し、スタック内にこのActivity_がある場合Aのインスタンスは多重化され、スタック内のインスタンス以上の他のActivityインスタンスがスタックから順次ポップアップされると、起動するActivity_Aはスタックの頂上に戻ってonNewIntentを呼び出します.スタック内のインスタンスが存在しない場合は、インスタンスを作成し、スタックに押し込みます.
3.singleTop
このモードはsingleTaskと似ています.たとえば、現在起動する必要があるActivity_Aがタスクスタックのスタックトップにある場合、このActivity_を多重化するAのインスタンスを呼び出し、そのonNewIntentを呼び出します.起動するActivity_が必要な場合Aのインスタンスがスタックトップにない場合、スタックではインスタンスを再作成してスタックに押し込む必要があります.
4.singleInstance
この起動モードは比較的特殊である.singleTaskのすべての特性に加えて、この起動モードのActivityは1つのタスクスタック内に単独でしか存在しないことが顕著な特徴である.システムは、新しい個別のタスクスタックを割り当て、このActivityのインスタンスはスタック内で独自に実行されます.
TaskAffinity
TaskAffinityは、通常、アプリケーションのすべてのActivityのタスクスタック名がデフォルトでパッケージ名であるため、このパラメータの宣言をAndroid Manifestファイルに表示しません.このパラメータは一般的にSingleTaskモードに適しており、この起動モードのActivityがどのタスクスタックで実行されるべきかを識別するために、ペアで使用するとより効果的です.
使用
Intent intent = new Intent(xxx.this, XXX.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
シミュレーションテストの過程でadb shell dumpsys activitiesコマンドを使用して、タスクスタックおよびそのactivityインスタンスを表示して、自分の推測を検証できます.