Androidの問題を作成しました:ここ
信じられないかもしれませんが、それは本当です。重要な点は、 -FLAG_ACTIVITY_MULTIPLE_TASK が同じ taskAffinity を持つ複数のタスクを作成することです。
Google ドキュメントで述べたように、MULTIPLE_TASK はランチャーとしてのみ使用する必要があります。
このバグを作成する方法は次のとおりです。
1. 3 つのアクティビティ、A1、A2、L を準備します。L - Launcher (おそらく singleInstance)、A2 - singleTask、A1 A2 は同じ taskAffinity を持っています
2.L は MULTIPLE_TASK で A1 を開始します。mHistory = L->[タスク 1: A1(トップ)]
3.A1 が A2 を開始します。mHistory = L->[タスク 1: A1->A2(top)]
4.HOMEを押すと、Lが起動します。 mHistory = [タスク1: A1->A2]->HOME->L(top)
5.L は MULTIPLE_TASK で A1 を開始します。mHistory = [タスク1: A1->A2]->HOME->L->[タスク2: A1(上)]
6.A1 が A2 を開始します。mHistory = [タスク1: A1->A2]->HOME->L->[タスク2: A1->A2(上)]
7.A2 の 2 つのインスタンスを取得します。これは singleTask アクティビティです。
BUG は、このフラグが原因です - FLAG_ACTIVITY_MULTIPLE_TASK
. 同じ taskAffinity で複数のタスクを作成できます。singleTask A2 の既存のタスクを見つけようとすると、最初に ではなく taskAffinity が比較されますActivity.componentName()
。
バグコードはcom/android/server/am/ActivityStack.java
line 2742 - `startActivityUncheckedLocked()`
line 520 which is in `findTaskLocked()` - first compare the taskAffinity