Android 在有意启动活动之前,请清除活动堆栈

Android 在有意启动活动之前,请清除活动堆栈,android,android-intent,Android,Android Intent,我正在为Android应用程序编写C2DM通知,我想在用户单击通知时打开我的应用程序。这没有问题,这很容易。 问题是,当应用程序启动时(单击通知后),如果之前打开了某些活动,则启动的活动似乎被添加到实际的活动堆栈中,这与我的应用程序的复杂性有关(有很多活动,有些带有静态字段) 要解决此问题,可以采用两种解决方案: 1) 不要调用特定的活动,只要求打开我的应用程序(例如,当我单击主屏幕上的应用程序图标时:如果应用程序已关闭,则打开第一个活动;如果应用程序已打开(但在后台),则将应用程序放在前面)

我正在为Android应用程序编写C2DM通知,我想在用户单击通知时打开我的应用程序。这没有问题,这很容易。 问题是,当应用程序启动时(单击通知后),如果之前打开了某些活动,则启动的活动似乎被添加到实际的活动堆栈中,这与我的应用程序的复杂性有关(有很多活动,有些带有静态字段)

要解决此问题,可以采用两种解决方案:

1) 不要调用特定的活动,只要求打开我的应用程序(例如,当我单击主屏幕上的应用程序图标时:如果应用程序已关闭,则打开第一个活动;如果应用程序已打开(但在后台),则将应用程序放在前面)

2) 清除所有活动堆栈并启动特定活动

但我没有成功地做到这两种解决方案中的一种。甚至使用意图标志(如)

有人能帮我解决这个问题吗

谢谢


PS:对不起,我的英语很差,我来自比利时:-)

听起来像是你在找的

如果设置,则在任务的活动堆栈中标记一个点,当任务重置时应清除该点。也就是说,下一次任务被带到前台时,如果需要(通常是用户从家中重新启动该任务的结果),将使用标志“活动”“重置”“任务”


这不是您要求执行的操作,但是您可以将属性
android:launchMode=“singleTask”
添加到您将从此通知中调用的活动中,并且如果此实例已经存在,则不会创建新活动

你也可以使用ActivityManager.KillBackgroundProcess(String packageName)删除后台进程,但我从未尝试过,也不建议使用ChriZzZ建议,或者使用ChriZzZ建议,更严格地管理你的活动。

android:launchMode=“singleTask”似乎解决了我的问题。非常感谢你