我有一个Activity
A ,在Android Manifest中声明为singleTop
和android.intent.action.MAIN
。我从启动器启动它,然后启动另一个活动 B 到Intent
,然后按Home按钮。现在我有一个活动堆栈“ A , B ”在后台等待的任务。如果我再次从启动器启动活动 A ,我将恢复已经运行的实例并恢复堆栈(活动 B 在前台运行)。
这很好。我想从我自己的Notification
启动活动 A 时达到同样的效果。我尝试了Intent
标志的不同组合,但我有一个新的活动实例 A 或同一个实例但是已清除堆栈(没有活动 B 在前景中。
答案 0 :(得分:0)
首先,让我们确保在您长时间不使用该任务时系统不会终止您的活动B.
如果用户长时间离开任务,系统将清除除根活动之外的所有活动的任务。当用户再次返回任务时,仅恢复根活动。系统以这种方式运行,因为在很长一段时间后,用户可能已经放弃了之前正在做的事情,并且正在返回任务以开始新事物。
您可以使用一些活动属性来修改此行为:
alwaysRetainTaskState
:如果在任务的根活动中将此属性设置为“true”,则不会发生刚刚描述的默认行为。即使经过很长一段时间,任务仍会保留堆栈中的所有活动。因此,您需要做的是在A的清单文件中的<activity>
标记下将其设置为true。
其次,您不需要singleTop
。从Android文档中查看此figure。我想这就是你想要的。如果启动指定singleTask
启动模式的活动,则如果后台任务中存在该活动的实例,则将整个任务带到前台。此时,后端堆栈现在包括在堆栈顶部提出的任务中的所有活动。
因此,您还需要在A和B的标记下添加singleTask
,而不是singleTop
。然后,您需要在没有任何标记的情况下从通知中启动活动A,FLAG_ACTIVITY_NEW_TASK
和FLAG_ACTIVITY_REORDER_TO_FRONT
(可选)。
我自己没有尝试过,但我坚信它会起作用。尝试一下,如果没有,请告诉我。