Android 10 上的 taskAffinity 和 excludeFromRecents 问题

Posted

技术标签:

【中文标题】Android 10 上的 taskAffinity 和 excludeFromRecents 问题【英文标题】:Issue with taskAffinity and excludeFromRecents on Android 10 【发布时间】:2020-07-08 11:25:59 【问题描述】:

我有一个有时会向用户显示通知的应用程序。 按下通知时,会触发“调度”活动,该活动会调用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 启动,并会在立即调用finish() 之前使用Intent.FLAG_ACTIVITY_NEW_TASK 启动一个新活动。如果我的应用程序已经启动,那么新的 Activity(我们称之为second Activity)会在之前已经启动的 Activity 之上启动,因此当您按下“最近”按钮时,您只能看到我的应用程序一次。

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

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

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

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

谢谢!

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

【问题讨论】:

【参考方案1】:

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

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

<activity
        android:name=".DispatchActivity"
        android:excludeFromRecents="true"
        android:launchMode="singleTask"
        android:noHistory="true"
        android:taskAffinity="" />

【讨论】:

尝试使用android:noHistory="true",但它没有改变任何东西。我仍然可以在最近的应用程序面板中看到我的应用程序出现了两次,而在其他 Android 版本上却没有。 安卓操作系统级别? 设备在 Android 10 上。项目的 targetSdk = 29 和 compileSdkVersion = 29。 你试过 android:autoRemoveFromRecents="true" 和 android:excludeFromRecents="true"

以上是关于Android 10 上的 taskAffinity 和 excludeFromRecents 问题的主要内容,如果未能解决你的问题,请参考以下文章

是否有针对 Android <10 上的任务劫持的修复?

android上的Meteor.loginWithGoogle错误10

带有远程视图的 Android 10 上的黑暗通知

Android 10 上的 taskAffinity 和 excludeFromRecents 问题

Galaxy Tab 10.1 上的 Android ADK 错误

如何修复 Windows 10 上的 Android Studio adb 错误?