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

时间:2012-06-06 19:31:26

标签: android android-activity back-stack taskaffinity

假设我们有两项活动。

A - 主要活动,即启用家庭启动器" (适当的意图过滤器等)

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

假设B代表一个任务,只有当它没有完成时才有效 - 返回它或者在完成它之后从最近的任务中再次启动它不是一个选项。

在某些时候 - A开始B开始新任务。目标是在用户完成B时从最近的任务列表中删除B.用户可以从B导航到其他任务(使用主页长按)然后导航回B,只要它没有完成。从发射器发射A不会将B带到前台,因为它们具有不同的任务亲和力。

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

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

2 个答案:

答案 0 :(得分:3)

标准答案

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

近期任务专门为了方便用户使用,无论应用程序是否正在运行,都允许用户返回他们一直使用的任何应用程序。然而,有好消息。此过程不会让您的应用程序保持活力!它只是一个指向您的包裹的图标。

不幸的是,这意味着如果您的应用仍然在运行,那么还会继续保持其运行。

非标准答案

可以通过在运行时编辑包属性(与在java代码中启用/禁用组件的方式相同)。这是非常气馁的,因为Recent Tasks是Android核心平台的可用性功能。这需要一些研究。

答案 1 :(得分:0)

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

在您的情况下,您将不得不:

  • 创建一个名为ExitActivity的新活动C,并按照另一个答案中的描述添加清单标记。
  • 活动B应在清单中具有以下属性:Copy-Item -destination $MediaDir
  • 将C上的任务关联属性设置为与B
  • 相同
  • ExitActivity中对android:taskAffinity="com.example.ActivityB" android:allowTaskReparenting="true" android:launchMode="singleTask" android:documentLaunchMode="always"的调用应该只是最后三个:Intent.addFlags