在使用intent启动活动之前清除活动堆栈

时间:2011-12-14 14:20:37

标签: android android-intent

我正在处理Android应用程序的C2DM通知,我想在用户点击通知时打开我的应用程序。这没有问题,这很容易。 问题是当应用程序启动时(点击通知后),如果先前打开了一些活动,启动的活动似乎被添加到实际的活动堆栈中,那么关于我的应用程序的复杂性有什么问题(那里是很多活动,有些是静态字段。)

要解决这个问题,2个解决方案就可以了:

1)不要调用特定的活动,只是要求我的应用程序打开(就像我点击主屏幕上的应用程序图标一样:如果应用程序关闭或者只是将应用程序带到前面,请打开第一个活动如果被打开(但是在背景中))。

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

但我没有成功做到两种解决方案之一。甚至使用意图标志(如http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP)。

有人可以帮我解决这个问题吗?

由于

PS:抱歉我的英语不好,我来自比利时: - )

2 个答案:

答案 0 :(得分:1)

这不是您要求做的,但您可以将属性android:launchMode="singleTask"添加到您将从此通知中调出的活动中,如果此实例已存在,则不会创建新活动。

您也可以使用ActivityManager.killBackgroundProcesses(String packageName)删除后台进程,但我从未尝试过此操作,并且不建议或使用ChriZzZ建议并将您的活动管理得更紧。

答案 1 :(得分:0)

听起来像是在搜索FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET

  

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