0

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

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

4

1 回答 1

0

首先,让我们确保当您长时间不使用该任务时系统不会杀死您的Activity B。

如果用户长时间离开一个任务,系统会清除该任务除根Activity之外的所有Activity。当用户再次返回任务时,仅恢复根活动。系统的行为方式是这样的,因为在很长一段时间后,用户可能已经放弃了他们之前所做的事情并返回到任务中开始新的事情。

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

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

其次,你不需要singleTop. 从 Android 文档检查这个数字。我想这就是你想要的。如果您启动一个指定singleTask启动模式的活动,那么如果该活动的一个实例存在于后台任务中,则整个任务将被带到前台。此时,后退堆栈现在包括来自堆栈顶部的任务中的所有活动。

所以你还需要singleTask在 A 和 B 的标签下添加,而不是singleTop. 然后,您需要从 Notification 启动活动 A,不带任何标志,但FLAG_ACTIVITY_NEW_TASKFLAG_ACTIVITY_REORDER_TO_FRONT(可选)。

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

于 2012-07-14T17:34:42.990 回答