3

我正在浏览 Android Task 和 Back Stack 文档,有一次他们提到了这一点:

如果您的应用程序允许用户从多个活动启动特定活动,则会创建该活动的一个新实例并将其推送到堆栈上(而不是将任何先前的活动实例置于顶部)。因此,您的应用程序中的一个 Activity 可能会被多次实例化(甚至来自不同的任务),如图 3 所示。因此,如果用户使用“后退”按钮向后导航,则该 Activity 的每个实例都会按照它们的顺序显示已打开(每个都有自己的 UI 状态)

举个例子:

我有 Activity A 启动 Activity B 启动 Activity C 启动 D。

堆栈是 A->B->C->D现在可以从 D 开始 C 所以当我们从 D 开始 C 堆栈将是

A->B->C->D->C

现在,我希望 Activity 在 Back Stack 中只有 1 个实例或只有 1 个条目,而不是这种标准行为。“SingleTop”将不起作用,因为当我们从 D 启动 Activity C 时它不在顶部。

我可能会遗漏一些东西,但有什么办法可以确保活动只有 1 个 backstack 条目?

谢谢普拉内

4

2 回答 2

6

使用Intent.FLAG_ACTIVITY_CLEAR_TOP,例如:

    Intent intent = new Intent(context, <your_activity_here>);
    intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    context.startActivity(intent);

因此,活动 C 之后堆栈中的所有活动都将自动完成。如果您使用指定的标志

A->B->C->D

会变成

A->B->C

于 2012-10-11T18:04:31.183 回答
3

你也可以使用android:launchMode="singleInstance" in your activity tag in manifest

于 2012-10-11T18:11:46.500 回答