Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/207.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
Java 除在家外,停止所有活动_Java_Android_Android Activity - Fatal编程技术网

Java 除在家外,停止所有活动

Java 除在家外,停止所有活动,java,android,android-activity,Java,Android,Android Activity,我在Android应用程序上有以下一系列活动: A -> B -> C 在C上,我可以使用带有Intent.FLAG\u ACTIVITY\u CLEAR\u TOP和Intent.FLAG\u ACTIVITY\u SINGLE\u TOPIntent标志的startActivity返回(“A”)。这将清除活动B和C的堆栈,因此它只是A。到目前为止还不错;这就是我的“家” 但是,我有另一个部分——“E”——我希望它清除除home(“A”)之外的整个堆栈。例如: 我试过在打开小节(

我在Android应用程序上有以下一系列活动:

A -> B -> C
在C上,我可以使用带有
Intent.FLAG\u ACTIVITY\u CLEAR\u TOP
Intent.FLAG\u ACTIVITY\u SINGLE\u TOP
Intent标志的startActivity返回(“A”)。这将清除活动B和C的堆栈,因此它只是A。到目前为止还不错;这就是我的“家”

但是,我有另一个部分——“E”——我希望它清除除home(“A”)之外的整个堆栈。例如:

我试过在打开小节(“B”、“E”等)时使用
Intent.FLAG\u ACTIVITY\u NEW\u TASK
,但似乎无法清除以前的任务。我也尝试了
Intent.FLAG\u ACTIVITY\u TASK\u ON\u HOME
但它似乎没有任何作用(你怎么设置“HOME”呢?)


可能吗

一个不太复杂的解决方案是在传递给
活动
A的“clear top”
意图
中添加一个额外的内容。根据该信息,您可以在
活动
A收到新的
意图时采取行动

比如说。您可以设置一系列“命令”,在
活动
a中接收
意图
时识别这些命令,然后根据这些命令执行操作;i、 e.开始
活动
e

或者,由于和
Intent
是可打包的,您可以将启动
Activity
E的
Intent
附加到发送给
Activity
A的“clear top”
Intent
上。您不需要识别命令,只需检查是否有“转发的Intent”并调用
startActivity即可(转发内容)

在所有这些情况下,清除顶部标志将导致B和C弹出,留下A。
活动
A将负责启动E。流程应足够快,不会导致任何视觉闪烁,例如,在
活动
E接管之前,从
活动
A短暂显示


我不确定您所追求的行为是否对用户有意义,但我将由您决定。

如果您不需要返回到以前的
活动
,为什么不在调用
startActivity(…)后立即在每个
活动
中调用
finish()
开始下一步?您好。类似的问题和答案可以在这里找到:。:)如果您使用的是API<11,那么您别无选择,只能创建自己的逻辑来清除堆栈。但是如果您使用的是API>=11,那么您可以只使用
Intent.FLAG\u ACTIVITY\u CLEAR\u TASK
。Squonk:因为在决定返回其他路径之前,我可能有一系列活动。在我的例子中,
finish()。然而,我的应用程序支持API v8,所以我想这就是为什么我没有遇到它(以及为什么我不能使用它…)。谢谢你的回答。我最初认为这是一个奇怪的解决方案,但实际上效果很好。我现在只是运行我的“主菜单”意图,并传递一个额外的“命令”作为参数。主菜单活动在
onNewIntent()
上接收新意图,然后打开新活动。这一切都是无形发生的,所以没有小故障。另外:这种行为可能看起来很奇怪,但它是有意义的,因为我的应用程序上几乎所有的活动都有一个滑动菜单。从C转到E意味着用户选择转到应用程序的不同部分,因此返回应该返回到主菜单活动,而不是C。
Activity stack: A -> B -> C
(User clicks on "E" button)
Activity stack result: A -> E