Mic*_*l P 9 android taskaffinity android-activity back-stack
假设我们有两个活动.
A - 主要活动,即"启用主启动器"(适当的意图过滤器等)
B - 具有singleTask规范的任务根活动(此活动只能有一个实例)和自定义taskAffinity(用于区分主要任务)根).
假设B代表一个任务,只有当它没有完成时才有效 - 返回它或者在完成它之后从最近的任务再次启动它不是一个选项.
在某些时候 - A开始B开始新任务.目标是在用户完成B时从最近的任务列表中删除B.用户可以从B导航到其他任务(使用主页长按)然后导航回B,只要它没有完成.从启动器启动A不会将B带到前台,因为它们具有不同的任务关联性.
Android将B识别为任务的根,因此即使B已完成,B也会在最近的任务列表中可见,并且用户始终可以返回到该任务.使用A将B移动到一个任务不是解决方案,因为在B运行的时间 - 用户应该能够在A和B任务之间切换.将excludeFromRecents添加到B的清单会将其从最近的任务列表中完全删除,这也是不好的解决方案.
怎么实现呢?(对不起,我的英语不好)
标准答案
抱歉,我要告诉你一个坏消息,但是如果不重写应用程序的工作方式,就无法使用标准方法来实现此功能。即使如此,它也只能在您的应用程序运行时有效。此外,这样做需要具有专门 ROM 的 root 设备,因为无论如何您都无法覆盖 Home 按钮的功能。您所能做的就是响应,onNewIntent()如果您长按主页按钮,则不会触发。
最近的任务专门为了方便用户使用,允许他们返回到他们一直在使用的任何应用程序,无论应用程序是否正在运行。不过,有个好消息。此过程不会让您的应用程序保持活力!它只是一个指向您的包裹的图标。
不幸的是,这意味着如果您的应用程序仍在运行,则可能会发生其他事情来使其保持运行。
非标准答案
这可以通过在运行时编辑包属性来实现(与从 java 代码启用/禁用组件的方式非常相似)。强烈建议不要这样做,因为“最近的任务”是 Android 核心平台的一项可用性功能。这需要一些研究。