在主屏幕顶部的 Activity 上调用 movetasktoback 方法不会将主屏幕带到前台
Posted
技术标签:
【中文标题】在主屏幕顶部的 Activity 上调用 movetasktoback 方法不会将主屏幕带到前台【英文标题】:Calling movetasktoback method on an Activity on top of home screen does not bring Home screen to foreground 【发布时间】:2015-04-06 04:50:03 【问题描述】:我有一个启动模式为单任务的活动。该活动由广播接收器使用意图标志 Intent.FLAG_ACTIVITY_NEW_TASK 启动。如果此活动位于主屏幕顶部,并且如果我从此活动调用 moveTasktoBack(true),我希望显示主屏幕而不是主屏幕,来自另一个任务的活动 B 被带到前面。操作顺序如下。
任务 B 中的活动 B -> [按主页按钮] -> 主屏幕 -> 通过广播接收器启动活动 A -> 活动 A 调用 moveTaskToBack(true) -> 任务 B 中的活动 B 进入前台。
我检查了任务 A(带有活动 A)和任务 B(带有活动 B)的任务关联性,它们是不同的。
我如何确保在这种情况下,当 Activity 自身移动到堆栈后部时会显示主屏幕。
【问题讨论】:
【参考方案1】:不要将您的任务移至后台,只需像这样启动主屏幕:
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
【讨论】:
我不能总是这样做,因为我的用例需要在 Activity A 在 Activity B 之上启动并调用 Activity A 调用 movetasktoBack 的情况下弹出 Activity B。在这种情况下,Activity B 可以来自任何应用程序,并且在大多数情况下不会与 Activity A 属于同一任务。 您的评论毫无意义。此代码完成与调用moveTaskToBack()
相同的事情。它将调用Activity
所在的任务移动到后台并向用户显示主屏幕。这正是你说你想做的。我不明白你的抱怨。请试试这个,然后告诉我什么不能按你想要的方式工作。
我想在 AOSP 中遇到了以下错误。 gitorious.org/cyandreamproject/android_frameworks_base/commit/…
我们有一个定制的设备,我们 fork Android 放在我们的设备上。我们的 Android 可能没有此修复程序。正如我所说,如果我在不同的活动之上,我并不总是想回到主屏幕。在我的场景中,虽然我在主屏幕顶部,但在调用函数 moveTasktoback 时,不会显示主屏幕,但如果我在任何其他活动之上,事情就会按预期工作。
您在问题中写了 ...with launch mode as Single Task。由于您的Activity
是以singleTask
启动的,因此它不能在另一个Activity
之上启动。它永远是新任务的根源。在这种情况下,我的代码应该做你想做的事。但是,如果存在导致不良行为的 Android 错误...【参考方案2】:
在尝试使用堆栈中的更多活动(来自不同应用程序)和自动情况(即以编程方式接收广播事件时)执行 moveTaskToBack (true) 时,我遇到了自己的问题。我不确定确切的原因是什么。但是我使用核选项解决了它们:我没有尝试将活动/任务移回,而是使用完成()将其杀死。它运作良好,在我想的所有情况下。可能会减慢速度,因此请谨慎使用,但就我而言,它解决了问题。而且,当然,您需要保存所有相关的状态信息并恢复它。在我的情况下,这不是一个大问题。
【讨论】:
以上是关于在主屏幕顶部的 Activity 上调用 movetasktoback 方法不会将主屏幕带到前台的主要内容,如果未能解决你的问题,请参考以下文章
在Android N多窗口模式下按下主页按钮时未调用Activity onStop()