2016-03-08 2 views
7

アクティビティActivity1,Activity2,およびActivity4です。 Activity1はその後、いくつかのイベントで、私はActivity2にいくつかのイベントで、その後Activity2を開始するから、私はアンドロイドのsingleTask launchModeは動作しません

public void onClick(View v) { 
    Intent intent = new Intent(Activity2.this, Activity3.class); 
    intent.setFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK|Intent.FLAG_ACTIVITY_NEW_TASK); 
    startActivity(intent); 
} 
ここ

Activity2 launchModeがsingleTaskとしてdecalaredされるように、新しいタスクとしてActivity3を開始し始めます。

その後、私は私がActivity4からActivity2を起動すると、私はそれはのようなbackstack

タスクA

を持つべきであると信じてActivity4

Activity3からナビゲート| Activity2 |

|アクティビティ1 |

タスクB

|アクティビティ4 |

|アクティビティ3 |

enter image description here

以下の図に示すが、Activity2の代わりに新しいインスタンスが

タスクB

として現在のタスクに追加される| Activity2 |

|アクティビティ4 |

|アクティビティ3 |

タスクA

|アクティビティ2 |

|アクティビティ1 |

誰かが私にこれを理解してもらえますか?

+0

AndroidManifest.xmlファイルの 'launchMode =" singleTask "フラグをActivity3タグに設定しましたか? –

+0

はい 'launchMode =" singleTask "フラグを設定しました。 – Sushant

+0

ねえ、setFlagsメソッドでこのフラグ 'Intent.FLAG_ACTIVITY_MULTIPLE_TASK'を使わないでください。 'FLAG_ACTIVITY_NEW_TASK'と' FLAG_ACTIVITY_SINGLE_TOP'(必要な場合)を使うだけです。 –

答えて

5

起動しようとしているのtaskAffinityが現在のタスクのtaskAffinityと異なる場合を除き、Androidは新しいタスクを作成しません。 taskAffinityは他の何よりも優先されます。また

<activity android:name=".Activity3" 
      android:taskAffinity=""/> 

Activity4launchMode="singleTask"で宣言されていても、Androidは作成されません。

あなたが本当に別のタスクを開始したい場合は、あなたがこのようなActivity3taskAffinityを調整する必要があります他のアクティビティと異なるtaskAffinityが存在する場合を除き、新しいタスクです。

同じアプリケーションに対して複数のタスクを作成すると、多くの副作用が発生することに注意してください。ユニークなアイコンと、各タスクのルートActivityの一意のラベルを提供する必要があります。そうしないと、ユーザーはアプリに戻るときに混乱します(さまざまなタスクのどれが正しいタスクかを判断できなくなります) )。また、予期せず1つのタスクから別のタスクにアクティビティを移動するtaskReparentingが発生する可能性があります。これはすべて非常に複雑なものであり、ほとんどの開発者は完全に理解しておらず、間違っています。

また、FLAG_ACTIVITY_MULTIPLE_TASKの使用は確かに間違っています。これを使用する必要のある唯一のタイプのアプリケーションはランチャーです。同じActivityで複数のタスクを起動すると、特定のプログラムにプログラマチックに戻ることができなくなり、ユーザを完全に混乱させることになります。これは間違いなくあなたが望むものではありません。

多くの場合、複数のタスクは必要ありませんが、通常は解決するよりも多くの問題が発生します。なぜあなたは複数のタスクが必要だと思うのか説明してください。

関連する問題