如何返回关闭活动之间的活动?

Posted

技术标签:

【中文标题】如何返回关闭活动之间的活动?【英文标题】:How to return to an activity closing the in between activities? 【发布时间】:2020-03-04 10:08:55 【问题描述】:

我需要回到我的应用程序的主要活动,但为此,我需要关闭当前活动和主要活动之间的所有活动。

我试过这个:

Intent intent = new Intent(getActivity(), MainMenuActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity( intent );

问题是这样做,主要活动也关闭并重新打开,在主要命运活动中调用 onDestroy()。我需要回到它而不关闭并重新打开它。如何实现?

【问题讨论】:

【参考方案1】:

FLAG_ACTIVITY_CLEAR_TOP 上的 documentation 表示

当前正在运行的实例 [...] 将在其 onNewIntent() 方法中接收您在此处启动的新意图,或者自行完成并以新意图重新启动。如果它已声明其启动模式为“多重”(默认)并且您没有在同一意图中设置 FLAG_ACTIVITY_SINGLE_TOP,那么它将完成并重新创建;对于所有其他启动模式,或者如果设置了 FLAG_ACTIVITY_SINGLE_TOP,则此 Intent 将被传递到当前实例的 onNewIntent()。

在您的情况下,我假设您的 MainMenuActivity 具有“多重”启动模式。由于您没有设置FLAG_ACTIVITY_SINGLE_TOP,所以设置完成并重新启动。

所以如果你使用

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|FLAG_ACTIVITY_SINGLE_TOP);

然后根据文档,MainMenuActivity 实例将保持其状态,onNewIntent() 将被调用。

注意:您可以使用setIntent()Intent 传递到onNewIntent() 中“IntentActivity@”

【讨论】:

【参考方案2】:

您是否尝试将launchMode 设置为MainActivity。请注意,这应该针对特定Activity 内的所有交易进行。检查the options for from documentation。

关于如何启动活动的说明。有四个 与活动标志(FLAG_ACTIVITY_* 常量)在 Intent 对象中确定当 调用活动来处理意图。它们是:

"standard"
"singleTop"
"singleTask"
"singleInstance"

【讨论】:

以上是关于如何返回关闭活动之间的活动?的主要内容,如果未能解决你的问题,请参考以下文章

一个活动和另一个活动之间的动画过渡[关闭]

用户发送短信时如何关闭短信应用程序并返回活动? [复制]

在活动之间切换而不关闭它们

Selenium WebDriver .getWindowHandles()返回先前关闭的窗口,如何区分这些窗口和活动窗口?

当用户按下返回按钮关闭活动时保存和恢复活动状态

如果我关闭活动,从 BroadcastReceiver.onReceive 调用 peekService 将返回 null