2

我对 android backstack 有疑问,请考虑我在同一个应用程序中有两个活动 A 和 B 的场景,

  1. 从 A 开始。
  2. 从 A 发射 B 使用FLAG_ACTIVITY_NEW_TASK
  3. 从 B 启动 A 使用FLAG_ACTIVITY_NEW_TASK
  4. 按返回按钮 3 次返回主屏幕。

我的问题是 backstack 如何使用这个标志,是每次创建新任务并且之前的任务被推送到后台还是在同一任务之上创建活动。

我的疑问是,如果第一个是正确的,那么后退按钮是否真的从堆栈顶部删除了活动,如果第二个是正确的,那么该标志在正确意义上的用途是什么。

提前致谢。

问候, 罗希特

4

1 回答 1

2

首先,除非您在清单中为 B 明确设置,否则使用启动 BFLAG_ACTIVITY_NEW_TASK不会创建新任务。原因是,默认情况下,应用程序中的所有活动都具有相同的和overrides 。android:taskAffinitytaskAffinitytaskAffinityFLAG_ACTIVITY_NEW_TASK

如果您已将 A 和/或 B 的 taskAffinity 设置为不同(或均为空),则其工作方式如下:

  • 用户从主屏幕启动 A。您现在有一项任务(我们称之为 TaskX)
  • A 使用 FLAG_ACTIVITY_NEW_TASK 启动 B。您现在有两个任务(我们将新任务称为 TaskY)。TaskX 被推到后台,TaskY 在前台。
  • B 使用 FLAG_ACTIVITY_NEW_TASK 启动 A。你仍然只有两个任务。B(在TaskY中)启动了A,它创建了A的一个新实例并将其放入TaskX中,因为A的第一个实例与A的第二个实例具有相同的taskAffinity)。这也导致 TaskX 进入前台,TaskY 进入后台。
  • 按“返回”。A 的第二个实例从堆栈中移除,然后您返回到 TaskX 中 A 的第一个实例。按“返回”键返回当前任务
  • 按“返回”。从堆栈中删除 A 的第一个实例。TaskX 现在是空的,因为它没有任何活动。前一个任务(TaskY)被带到前台,B 被恢复。
  • 按“返回”。B 的实例从堆栈中移除。TaskY 现在为空并显示主屏幕。
于 2012-06-13T08:27:57.373 回答