Intent.FLAG_ACTIVITY_NEW_TASK 解析中
まず最初に、区別された以下の2つのLaunchMode発射モード機能を強調することが重要である。
-
アクティビティがシングルタスクに設定されている場合
(1) 新しいタスクスタックを作らない(TaskIdは全て同じ)。
(2) すでにスタックに存在する場合、再度このActivityのトリガーとして要求されると、そのインスタンスのonNewIntentメソッドが呼ばれ、新しいインスタンスは再作成されません。
(3) このクラスがあるタスクスタックの上に他のアクティビティがある場合、その上のアクティビティはすべてスタックから外れる。 -
アクティビティがシングルインスタンスとして設定されている場合
(1) このアクティビティがインスタンスを持っていない場合、新しいタスクスタックを作成します。(2つのTaskIdは同じではありません)
(2) 既にタスクスタックにこのActivityのインスタンスがある場合、onNewIntentメソッドを呼び出し、新しいタスクスタックとインスタンスを作成しない。
(3)タスクスタックとして独り立ちし、自分だけを持つ。そして、まず現在のタスクをリタイアさせ、次に他のタスクをリタイアさせることで、常にスタックからインスタンスを離すこと
FLAG_ACTIVITY_NEW_TASKの比較標準解説は以下の通りです。
まず、開始されるアクティビティと同じ親和性(すなわちtaskAffinity、同じアプリケーションのアクティビティは同じ親和性を持つことに注意)のタスクスタックがあるかどうかを調べます。もしあれば、スタック全体を直接前景に移動し、スタックの古いアクティビティの順序は変更せずに、開始するアクティビティを行います。 もしなければ、新しいスタックが作成されて、開始したアクティビティを保持します。デフォルトでは、同じアプリケーションのすべてのアクティビティは、同じ関係(taskAffinity)を持つことに注意してください。
個人的な理解ですが
デフォルトでは、同じアプリケーション内のすべてのActivityは同じ関係(taskAffinity)、つまりFLAG_ACTIVITY_NEW_TASKで開かれた新しいActivityも同じタスクスタック(アプリケーションと同じタスクスタック)に入りますが、もし、新しいActivityを別のスタックに入らせたい場合は以下の設定も必要です。
<activity
android:name=".ui.activity.OtherTaskActivityXXX"
android:taskAffinity="android.task.browser"/> //note the taskAffinity here
そして、このOtherTaskActivityXXXページで他のページが開かれていれば、他のすべてのページがこの新しいタスクスタックに押されます。
タスクスタックIdを表示します。
int TaskId = mActivity.getTaskId();
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
ハートビート・エフェクトのためのHTML+CSS
-
HTML ホテル フォームによるフィルタリング
-
HTML+cssのボックスモデル例(円、半円など)「border-radius」使いやすい
-
HTMLテーブルのテーブル分割とマージ(colspan, rowspan)
-
ランダム・ネームドロッパーを実装するためのhtmlサンプルコード
-
Html階層型ボックスシャドウ効果サンプルコード
-
QQの一時的なダイアログボックスをポップアップし、友人を追加せずにオンラインで話す効果を達成する方法
-
sublime / vscodeショートカットHTMLコード生成の実装
-
HTMLページを縮小した後にスクロールバーを表示するサンプルコード
-
html のリストボックス、テキストフィールド、ファイルフィールドのコード例