如何以与发射器相同的方式发射活动?

时间:2012-07-14 16:35:39

标签: android android-intent

我有一个Activity A ,在Android Manifest中声明为singleTopandroid.intent.action.MAIN。我从启动器启动它,然后启动另一个活动 B Intent,然后按Home按钮。现在我有一个活动堆栈“ A B ”在后台等待的任务。如果我再次从启动器启动活动 A ,我将恢复已经运行的实例并恢复堆栈(活动 B 在前台运行)。

这很好。我想从我自己的Notification启动活动 A 时达到同样的效果。我尝试了Intent标志的不同组合,但我有一个新的活动实例 A 或同一个实例但是已清除堆栈(没有活动 B 在前景中。

1 个答案:

答案 0 :(得分:0)

首先,让我们确保在您长时间不使用该任务时系统不会终止您的活动B.

如果用户长时间离开任务,系统将清除除根活动之外的所有活动的任务。当用户再次返回任务时,仅恢复根活动。系统以这种方式运行,因为在很长一段时间后,用户可能已经放弃了之前正在做的事情,并且正在返回任务以开始新事物。

您可以使用一些活动属性来修改此行为:

alwaysRetainTaskState:如果在任务的根活动中将此属性设置为“true”,则不会发生刚刚描述的默认行为。即使经过很长一段时间,任务仍会保留堆栈中的所有活动。因此,您需要做的是在A的清单文件中的<activity>标记下将其设置为true。

其次,您不需要singleTop。从Android文档中查看此figure。我想这就是你想要的。如果启动指定singleTask启动模式的活动,则如果后台任务中存在该活动的实例,则将整个任务带到前台。此时,后端堆栈现在包括在堆栈顶部提出的任务中的所有活动。

因此,您还需要在A和B的标记下添加singleTask,而不是singleTop。然后,您需要在没有任何标记的情况下从通知中启动活动A,FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT(可选)。

我自己没有尝试过,但我坚信它会起作用。尝试一下,如果没有,请告诉我。