【问题标题】:Calling movetasktoback method on an Activity on top of home screen does not bring Home screen to foreground在主屏幕顶部的 Activity 上调用 movetasktoback 方法不会将主屏幕带到前台
【发布时间】: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 自身移动到堆栈后部时会显示主屏幕。

【问题讨论】:

    标签: android android-activity homescreen activity-lifecycle android-task


    【解决方案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) 时,我遇到了自己的问题。我不确定确切的原因是什么。但是我使用核选项解决了它们:我没有尝试将活动/任务移回,而是使用完成()将其杀死。它运作良好,在我想的所有情况下。可能会减慢速度,因此请谨慎使用,但就我而言,它解决了问题。而且,当然,您需要保存所有相关的状态信息并恢复它。在我的情况下,这不是一个大问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-14
      相关资源
      最近更新 更多