如何在不使用singleInstance或singleTask launchMode的情况下避免同一Activity的多个实例?

时间:2015-01-08 13:49:46

标签: android android-activity

这是我正在寻找的行为:

启动应用并导航=>活动A> B> C 然后我按Home键再次打开App =>返回C(堆栈A B C)

现在我正在运行一个创建通知的服务。 点击通知=>清除堆栈中的任何内容并从onNewIntent()打开A然后打开X(堆栈现在是A> X)

但点击通知时的当前行为是A B C A X(顶部为X)

据我所知,由于背景错误,这种情况正在发生。有关空白背景问题https://stackoverflow.com/a/24999724

的详细信息,请参阅以下帖子

所以我的结论是使用"标准" launchMode并找到一种方法,在单击通知时清除所有活动中的堆栈。是否有任何模式可以实现以获得此行为?

1 个答案:

答案 0 :(得分:0)

这与"错误的背景"无关。如果要单击Notification以清除任务堆栈并启动ActivityA的新实例,请在Intent中使用Notification中的以下标记:

Intent.FLAG_ACTIVIY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP

假设ActivityA仍处于活动状态(未完成)且位于任务堆栈的根目录,他将清除任务堆栈回ActivityA(包括清除{{1}的现有实例}),然后创建ActivityA的新实例并调用ActivityA等等。

如果您想重用onCreate()的现有实例,可以改用:

ActivityA

假设Intent.FLAG_ACTIVIY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP 仍处于活动状态(未完成)且位于任务堆栈的根目录,他将清除任务堆栈至ActivityA清除任务堆栈现有的ActivityA}实例,然后在ActivityA的现有实例上调用onNewIntent()