2

Androidのバックスタックに疑問があります。同じアプリに2つのアクティビティAとBがあるシナリオを考えてみてください。

  1. Aで始まります。
  2. AからBを使用して起動FLAG_ACTIVITY_NEW_TASK
  3. BからAを使用して起動FLAG_ACTIVITY_NEW_TASK
  4. 戻るボタンを3回押すと、ホーム画面に戻ります。

私の質問は、バックスタックがこのフラグでどのように機能するか、毎回新しいタスクが作成され、前のタスクがバックグラウンドにプッシュされるか、同じタスクの上にアクティビティが作成されるかです。

私の疑問は、最初のものが正しい場合、戻るボタンは実際にスタックの一番上からアクティビティを削除し、2番目が正しい場合、正しい意味でのそのフラグの使用は何ですか?

前もって感謝します。

よろしく、Rohit

4

1 に答える 1

2

まず、Bのマニフェストを明示的に設定しない限り、を使用してBを起動しても、新しいタスクは作成FLAG_ACTIVITY_NEW_TASKされません。この理由は、デフォルトでは、アプリケーションのすべてのアクティビティが同じであり、オーバーライドするためです。android:taskAffinitytaskAffinitytaskAffinityFLAG_ACTIVITY_NEW_TASK

Aおよび/またはBのtaskAffinityを異なるように(または両方とも空に)設定した場合、次のように機能します。

  • ユーザーがホーム画面からAを起動します。これで1つのタスクができました(これをTaskXと呼びましょう)
  • AはFLAG_ACTIVITY_NEW_TASKでBを起動します。これで2つのタスクができました(新しいタスクをTaskYと呼びましょう)。TaskXはバックグラウンドにプッシュされ、TaskYはフォアグラウンドにあります。
  • BはFLAG_ACTIVITY_NEW_TASKでAを起動します。まだ2つのタスクしかありません。B(TaskY内)はAを起動し、Aの新しいインスタンスを作成してTaskXに配置しました。これは、Aの最初のインスタンスがAの2番目のインスタンスと同じtaskAffinityを持っているためです。これにより、TaskXがフォアグラウンドになり、TaskYがバックグラウンドになります。
  • 「戻る」を押します。Aの2番目のインスタンスがスタックから削除され、TaskXのAの最初のインスタンスに戻ります。「戻る」キーを押すと、現在のタスク内に戻ります。
  • 「戻る」を押します。Aの最初のインスタンスがスタックから削除されます。TaskXにはアクティビティがないため、TaskXは空になりました。前のタスク(TaskY)がフォアグラウンドになり、Bが再開されます。
  • 「戻る」を押します。Bのインスタンスがスタックから削除されます。TaskYが空になり、ホーム画面が表示されます。
于 2012-06-13T08:27:57.373 に答える