1

我有一个应用程序有时会向用户显示通知。按下通知时,会触发“调度”活动,该活动会startActivities根据通知有效负载以某些意图导致适当的活动进行调用。这是根据https://developer.android.com/training/notify-user/navigation#ExtendedNotification在 Manifest 中声明的方式

            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如果我的应用程序已经启动,则新活动(我们称之为second Activity)将在之前已启动的活动之上启动,因此当您按下“最近”按钮时,您只能看到我的应用程序一次。

在此处输入图像描述

在此处输入图像描述

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

在此处输入图像描述

如果我再次按下最近按钮以恢复第二个活动,它就会消失,我只有初始活动。好像 SecondActivity 继承自excludeFromRecents其他 Android 版本并非如此的行为(我什至在 Android 11 预览版上进行了测试,它按预期工作)。

我尝试在 Manifest 中删除taskAffinity=""for DispatchActivity,以便它与应用程序中的其他活动具有相同的亲和力,但是当我收到通知时我遇到了问题,因为我的应用程序没有启动,而从 DispatchActivity 启动的活动由于excludeFromRecents标签而像最初在 Android 10 上一样消失了。

我现在没有主意了,所以如果您有任何解决方案或者可能已经遇到了问题,我愿意提供建议。

谢谢 !

如果需要,这里是示例代码:https ://github.com/LoicJ/MultiTaskBugSample.git

4

1 回答 1

0

答案是android:noHistory="true"将此行添加到清单文件中的活动中,它将提供您预期的行为。

您的最终代码可能如下所示:

<activity
        android:name=".DispatchActivity"
        android:excludeFromRecents="true"
        android:launchMode="singleTask"
        android:noHistory="true"
        android:taskAffinity="" />
于 2020-05-30T07:02:59.320 回答