我有一个应用程序,它有时会向用户显示通知。当按下通知时,将触发"Dispatch“活动,该活动将调用startActivities,并根据通知有效负载导致适当的活动。下面是如何根据https://developer.android.com/training/notify-user/navigation#ExtendedNotification在清单中声明它的
android:name=".DispatchActivity"
android:taskAffinity=""
android:excludeFromRecents="true"
android:launchMode="singleTask" />当我按下通知时,DispatchActivity使用Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK启动,并使用Intent.FLAG_ACTIVITY_NEW_TASK启动一个新活动,然后立即调用finish()。如果我的应用程序已经启动,新的活动(让我们称其为second Activity)将在之前已经启动的活动之上启动,因此当您按下Recents按钮时,您只能看到我的应用程序一次。


这实际上是我想要的行为。问题是,当我在Android 10上运行相同的代码并按下Recents按钮时,我可以看到我的应用程序的两个实例(我猜是两个任务):

如果我再次按下最近的按钮来恢复第二个活动,它就会消失,我只有最初的活动。似乎SecondActivity继承了excludeFromRecents behaviour,而在其他安卓版本上不是这样(我甚至在Android11预览版上测试过,它可以像预期的那样工作)。
我尝试在清单中删除DispatchActivity的taskAffinity="",以便它与应用程序中的其他活动具有相同的亲和力,但当收到应用程序未启动时的通知时,我会遇到问题,因为excludeFromRecents标签,从DispatchActivity启动的活动会像最初在Android10上一样消失。
我现在没有主意了,所以如果你有任何解决方案,或者可能已经遇到了这个问题,我欢迎你的建议。
谢谢!
如果需要,下面是示例代码:https://github.com/LoicJ/MultiTaskBugSample.git
发布于 2020-05-30 15:02:59
答案是android:noHistory="true"将此行添加到清单文件中的活动中,它将提供您预期的行为。
您的最终代码可能如下所示:
<activity
android:name=".DispatchActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:noHistory="true"
android:taskAffinity="" />https://stackoverflow.com/questions/60890814
复制相似问题