从BroadcastReceiver启动活动 - 解雇它不应该返回到我的应用程序堆栈中的先前活动

时间:2013-01-25 13:06:19

标签: android android-activity activity-stack

这是我的场景 - 应用程序以活动A开始,这是主要的启动点。还有从A发起的各种其他活动,例如B& C.从A到B应该是可逆的(按回实际返回),所以我在活动堆栈上需要A,A => C和回来。默认情况下一切正常。

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

我仍然在X上调用finish(),现在发生以下情况:无论哪个活动以前处于活动状态(比如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,但结果并不令人满意(如果我的应用程序在后台运行,这可以防止它在没有用户干预的情况下被解雇时排在最前面,但是在应用程序历史记录中,它会' ll显示X和X永远不应该在那里显示,加上如果用户实际选择它,肯定会启动X,那很糟糕。

如此简短

手机处于状态S1 X推出 通过调用finish(),X在没有用户交互的情况下被解雇 电话应返回状态S1

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

1 个答案:

答案 0 :(得分:0)

尝试使用标记FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS

  

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