1

这是我的场景 - 应用程序以 Activity A 开始,它是主要的启动点。还有从 A 启动的各种其他活动,比如 B 和 C。从 A 到 B 应该是可逆的(按下实际上返回),所以我需要在活动堆栈上的每个 A,对于 A => C 和返回也是如此。默认情况下,所有这些都可以正常工作。

现在变得棘手了:我有另一个活动,比如 X,它可以从后台进程(广播接收器)启动。当 X 启动时,它应该替换当前屏幕上的任何内容——那部分没有问题。然后 X 可以被用户解雇(以 finish() 和 startActivity(A) 结尾 - 所以我没有 X 在堆栈上)。它也可以由后台进程完成(广播接收器接收另一个意图) - 在后一种情况下我有问题。

我仍然在 X 上调用 finish(),现在发生了以下情况:无论哪个 Activity 先前处于活动状态(比如 A),都会再次显示。如果 A 在 X 启动之前显示,那很好,但是,如果我的应用程序在后台,一旦 X 被关闭,我希望恢复启动 X 之前的状态(所以要么显示主屏幕,要么显示在 X 之前运行的任何应用程序推出)。如果您想知道..我为什么要打扰用户-这是有充分理由的(这是一个电话应用程序,来电应该中断)。

似乎当我在 X 上调用dismiss时,应用程序将返回到活动堆栈中的任何其他内容。如果应用程序在 X 启动时处于前台,那很好,但如果不是,我希望 X 被关闭,并且无论哪个应用程序处于活动状态,都可以再次处于顶部。

以下是我在启动 X 时使用的意图标志: FLAG_ACTIVITY_NEW_TASK FLAG_ACTIVITY_CLEAR_TOP FLAG_ACTIVITY_NEW_TASK

我已经尝试过 FLAG_ACTIVITY_MULTIPLE_TASK 但结果不太令人满意(如果我的应用程序在后台运行,这会阻止它在 X 在没有用户干预的情况下被关闭时出现在顶部,但是在应用程序历史记录中,它会显示 X并且 X 永远不应该在那里显示,而且如果用户实际选择了它,肯定会启动 X,这很糟糕。

这么简单

电话处于状态 S1 X 已启动 X 通过调用 finish() 在没有用户交互的情况下关闭 电话应返回状态 S1

这可以以某种方式实现吗?

4

1 回答 1

0

尝试使用标志FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

如果设置,则新活动不会保留在最近启动的活动列表中。

于 2013-01-26T11:23:08.923 回答