Java 除在家外,停止所有活动
我在Android应用程序上有以下一系列活动: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”)之外的整个堆栈。例如: 我试过在打开小节(
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