android上的任务和backstack

时间:2012-06-13 06:34:17

标签: android android-intent back-stack

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

  1. 以A开头。
  2. 使用FLAG_ACTIVITY_NEW_TASK 从A发布B
  3. 来自B使用FLAG_ACTIVITY_NEW_TASK
  4. 启动A.
  5. 按3返回按钮返回主屏幕。
  6. 我的问题是,backstack如何使用此标志,每次都创建新任务,并将上一个任务推送到后台或在同一任务之上创建活动。

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

    提前致谢。

    此致 罗希特夏尔

1 个答案:

答案 0 :(得分:2)

首先,使用FLAG_ACTIVITY_NEW_TASK启动B将创建新任务,除非您已在B的清单中明确设置android:taskAffinity这样做的原因是,默认情况下,应用程序中的所有活动都具有相同的taskAffinitytaskAffinity覆盖FLAG_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现在为空,显示主屏幕。