首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在完成后从最近的任务中删除带有taskAffinity的singleTask活动?

如何在完成后从最近的任务中删除带有taskAffinity的singleTask活动?
EN

Stack Overflow用户
提问于 2012-06-07 03:31:26
回答 2查看 3.5K关注 0票数 10

假设我们有两个活动。

A- main activity,即"home launcher enabled“(正确意图过滤器等)

B-使用singleTask规范的任务根活动(此活动只能有一个实例)和自定义taskAffinity (以区分是否有别于主任务根)。

让我们假设B代表一个任务,它只有在没有完成时才有效--返回它或在完成后从最近的任务重新开始不是一个选项。

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

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

如何做到这一点?(为我糟糕的英语道歉)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-11 16:11:04

标准答案

很抱歉成为坏消息的承担者,但是如果不覆盖你的应用程序的工作方式,就无法使用标准方法来实现此功能。即使到那时,它也只能在你的应用程序运行的时候起作用。此外,这样做将需要一个带有专用ROM的根设备,因为您无论如何都不能覆盖Home按钮的功能。你所能做的就是响应onNewIntent(),如果你长时间按下Home键,它就不会触发。

最近的任务特别是为了方便用户使用,允许他们返回到他们一直在使用的应用程序,无论该应用程序是否正在运行。然而,也有好消息。这个过程并不能让你的应用保持活力!它只是一个指向你的包的图标。

不幸的是,这意味着如果您的应用程序仍在运行,那么一定有其他因素在使其继续运行。

非标准答案

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

票数 3
EN

Stack Overflow用户

发布于 2017-03-16 13:04:57

有点晚了,但这仍然是谷歌上最热门的。有关可能的解决方案,请参阅this answer。

在您的情况下,您必须:

创建一个名为answer.

  • Activity的新活动C,并添加清单标志,如other

  • 中所述B在清单中应具有以下属性:intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

将C上的任务亲和性属性设置为与B相同

  • 在ExitActivity中对Intent.addFlags的调用只能是最后三个: ExitActivity
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10920887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档