如何在 Android 上清除 SingleTop SingleInstance MainActivity 上的堆栈?

Posted

技术标签:

【中文标题】如何在 Android 上清除 SingleTop SingleInstance MainActivity 上的堆栈?【英文标题】:How to clear the stack on a SingleTop SingleInstance MainActivity on Android? 【发布时间】:2015-05-12 04:16:11 【问题描述】:

我正在尝试通过带有Intent 标志的startActivity 方法清除堆栈上的每一个活动:(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NO_HISTORY)

(我有一个重置并完成所有活动的退出按钮,我尝试了所有“如何制作退出按钮,如何终止应用程序”问题/答案。由于singleInstance@,它们对我没有帮助。 987654325@MainActivity的配置。

通常这应该可以工作并自动完成当前活动,而无需调用finish()。但是,当我在 androidManifest.xml 中将 MainActivity 标记为 singleInstance 时,它不起作用。如果我删除 singleInstance,它会按预期工作。

如果我在启动MainActivity 之后/之前手动调用finish() 以清除所有堆栈,finish() 会将应用程序返回到堆栈上的上一个活动。但我已经启动了MainActivity。所以一切都变得一团糟。

(我也尝试添加Intent.FLAG_ACTIVITY_SINGLE_TOPIntent.FLAG_ACTIVITY_MULTIPLE_TASK,只是为了看看它是否改变了任何东西而没有)

我需要一个适用于singleInstance 且不需要手动finish() 的解决方案。

更新 1:我尝试从 SingleTop 活动启动此 Intent(但更改它不会改变)

更新 2:我在 Android 2.3.3 模拟器上试试这个

【问题讨论】:

据我所知,目前有一个错误会阻止 FLAG_ACTIVITY_CLEAR_TOP 在棒棒糖下工作。这可能是问题吗? @jvrodrigues 感谢您提供此信息,不幸的是,我在 Android 2.3.3 上尝试了此操作,这是我支持的最低版本。 您好@frankish,您找到解决方案了吗?我遇到了同样的情况……我想清除所有以前的活动,包括具有 launchmode="singleInstance" 的活动 【参考方案1】:

你可以试试finishAffinity(),它会关闭堆栈中所有以前的活动

例子:

Intent intent = new Intent(MainActivity.this, MyActivity.class);
finishAffinity()
startActivity(intent);  

【讨论】:

以上是关于如何在 Android 上清除 SingleTop SingleInstance MainActivity 上的堆栈?的主要内容,如果未能解决你的问题,请参考以下文章

如果我的应用在后台,为啥 Android 操作系统不会创建 singleTop 活动的新实例?

Android 深入探讨sigleTask和singletop的区别

什么时候需要在 android 小部件或应用程序中使用 singleTop launchMode?

activity启动模式之singleTop

如何找到并清除所有Android设备上的SQLite数据库文件呢?

如何使用 Intent.FLAG_ACTIVITY_CLEAR_TOP 清除 Activity Stack?