Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何以与启动器相同的方式启动活动?_Android_Android Intent - Fatal编程技术网

Android 如何以与启动器相同的方式启动活动?

Android 如何以与启动器相同的方式启动活动?,android,android-intent,Android,Android Intent,我有一个ActivityA,在android清单中声明为singleTop和android.intent.action.MAIN。我从启动器启动它,然后通过Intent启动另一个活动B,然后按Home按钮。现在我有一个任务,活动堆栈“a,B”在后台等待。如果我随后再次从启动器启动activityA,我将返回已经运行的实例,并恢复堆栈(activityB在前台运行) 这很好。我希望在从我自己的通知启动活动A时达到同样的效果。我尝试了不同的Intent标志组合,但我得到了活动a的新实例,或者相同的实

我有一个
Activity
A,在android清单中声明为
singleTop
android.intent.action.MAIN
。我从启动器启动它,然后通过
Intent
启动另一个活动B,然后按Home按钮。现在我有一个任务,活动堆栈“aB”在后台等待。如果我随后再次从启动器启动activityA,我将返回已经运行的实例,并恢复堆栈(activityB在前台运行)


这很好。我希望在从我自己的
通知
启动活动A时达到同样的效果。我尝试了不同的
Intent
标志组合,但我得到了活动a的新实例,或者相同的实例,但堆栈已清除(前景中没有活动B

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

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

有一些活动属性可用于修改此行为:

AlwaysRetaintasksState
:如果在任务的根活动中将此属性设置为“true”,则不会发生刚才描述的默认行为。即使经过很长一段时间,任务仍会保留其堆栈中的所有活动。因此,您需要做的是在Android文档中的
下将其设置为true。我想这就是你想要的。如果启动了指定
singleTask
启动模式的活动,则如果该活动的实例存在于后台任务中,则整个任务将被带到前台。此时,后堆栈现在在堆栈顶部包含来自前向任务的所有活动

因此,您还需要在A和B标记下添加
singleTask
,而不是
singleTop
。然后,您需要从通知启动活动A,不带任何标志,但
标志活动\u新任务
标志活动\u重新排序\u到\u前端
(可选)

我自己也没有试过,但我坚信它会奏效。试试看,如果不行就告诉我