如何在 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_TOP
和Intent.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?