android - 完成后如何从最近的任务中删除具有 taskAffinity 的 singleTask Activity ?

标签 android android-activity back-stack taskaffinity

假设我们有两个 Activity 。

A - 主要 Activity ,即“启用主页启动器”(适当的 Intent 过滤器等)

B - 具有 singleTask 规范(此 Activity 只能有一个实例)和自定义 taskAffinity(以区分是否与主任务根)的任务根 Activity 。

假设 B 代表一项任务,该任务仅在未完成时才有效 - 返回它或在完成它后从最近的任务重新开始它不是一种选择。

在某个时间点 - A 启动 B 以开始一项新任务。目标是在用户完成 B 时从最近的任务列表中删除 B。用户可以从 B 导航到其他任务(使用主页长按),然后只要未完成就导航回 B。从启动器启动 A 不会将 B 带到前台,因为它们具有不同的任务相关性。

Android 将 B 识别为任务的根,因此即使 B 已完成,它在最近的任务列表中也是可见的,并且用户可以随时返回到它。将 B 移动到与 A 一起执行的任务不是解决方案,因为在 B 运行时 - 用户应该能够在 A 和 B 任务之间切换。将 excludeFromRecents 添加到 B 的 list 中会将其从最近的任务列表中完全删除,这也是一个糟糕的解决方案。

如何实现? (抱歉我的英语不好)

最佳答案

标准答案

很抱歉带来坏消息,但如果不覆盖应用程序的工作方式,则无法使用标准方法实现此功能。即使那样,它也只会在您的应用程序运行时有效。此外,这样做将需要具有专用 ROM 的 root 设备,因为无论如何您都无法覆盖主页按钮的功能。您所能做的就是响应 onNewIntent(),如果您长按主页按钮,它不会触发。

Recent Tasks 专为方便用户使用而设计,让他们可以返回到他们一直在使用的任何应用程序,无论该应用程序是否正在运行。不过,有个好消息。这个过程不会让你的应用程序保持活力!它只是一个指向您的包裹的图标。

不幸的是,这意味着如果您的应用仍在运行,则表明有其他因素正在使其保持运行。

非标准答案

这可能通过在运行时编辑包属性来实现(与您可以从 Java 代码启用/禁用组件的方式非常相似)。这是非常不鼓励的,因为最近的任务是 Android 核心平台的可用性功能。这需要一些研究。

关于android - 完成后如何从最近的任务中删除具有 taskAffinity 的 singleTask Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10920887/

相关文章:

android - Android Remote 如何与 Google TV 配合使用

android - 选项卡、 Material 设计和支持库

android - 更新android studio 3.3.2后无法找到请求的目标的有效证书路径

android - AppAutoStartupPolicy : prevent start service of package com. farsitel.bazaar

android - 从另一个页面获取值

android - 如何显示隐藏 fragment ?

android - 添加到后台堆栈时如何维护 fragment 状态?

android - PendingIntent 中的 TaskStackBuilder 不工作

进程被杀死时的 Android Activity 堆栈依赖性

android - Activity excludeFromRecents 不适用于 Android 5.0