假设我们有两项活动。
A - 主要活动,即启用家庭启动器" (适当的意图过滤器等)
B - 具有singleTask规范的任务根活动(此活动只能有一个实例)和自定义taskAffinity(用于区分主要任务根)。
假设B代表一个任务,只有当它没有完成时才有效 - 返回它或者在完成它之后从最近的任务中再次启动它不是一个选项。
在某些时候 - A开始B开始新任务。目标是在用户完成B时从最近的任务列表中删除B.用户可以从B导航到其他任务(使用主页长按)然后导航回B,只要它没有完成。从发射器发射A不会将B带到前台,因为它们具有不同的任务亲和力。
Android将B识别为任务的根,因此B在最近的任务列表中可见,即使它已完成,用户也可以随时返回到它。使用A将B移动到一个任务不是解决方案,因为在B运行的时间 - 用户应该能够在A和B任务之间切换。将excludeFromRecents添加到B<的清单中会将其从最近的任务列表中完全删除,这也是一个不好的解决方案。
如何实现呢? (抱歉我的英语不好)
答案 0 :(得分:3)
标准答案
很抱歉成为坏消息的承载者,但是如果不覆盖应用程序的工作方式,则无法使用标准方法实现此功能。即便如此,它只会在您的应用运行时运行。此外,这样做需要带有专用ROM的root设备,因为无论如何都无法覆盖Home按钮的功能。您所能做的就是回复onNewIntent()
,如果您长按主页按钮,则不会触发。
近期任务专门为了方便用户使用,无论应用程序是否正在运行,都允许用户返回他们一直使用的任何应用程序。然而,有好消息。此过程不会让您的应用程序保持活力!它只是一个指向您的包裹的图标。
不幸的是,这意味着如果您的应用仍然在运行,那么还会继续保持其运行。
非标准答案
可以通过在运行时编辑包属性(与在java代码中启用/禁用组件的方式相同)。这是非常气馁的,因为Recent Tasks是Android核心平台的可用性功能。这需要一些研究。
答案 1 :(得分:0)
有点晚了,但这仍然是谷歌的最高点。有关可能的解决方案,请参阅this答案。
在您的情况下,您将不得不:
Copy-Item -destination $MediaDir
android:taskAffinity="com.example.ActivityB"
android:allowTaskReparenting="true"
android:launchMode="singleTask"
android:documentLaunchMode="always"
的调用应该只是最后三个:Intent.addFlags