0

我正在尝试找到一种在android中的任务之间切换的方法。

假设我有活动 A、B、C、D。

活动 A 和 B 在一个任务中(亲和力)

而 C 和 D 在另一个任务中。

这是创建新任务的 C 活动的清单代码。

 <activity
        android:name=".CActivity"
        android:launchMode="singleTask"
        android:taskAffinity="com.new" />

A、B 在一个任务中创建,C、D 在另一个任务中创建。现在,我们只需要从 D 切换到 B 而不创建 B 的新实例。也可以从 A 切换到 D 而不创建 D 的新实例。

任务 1:A > B 任务 2:C > D

编辑:这两个堆栈来自同一个应用程序。我使用两个的原因是一个是我的普通应用程序,另一个堆栈用于我的应用程序中的视频通话功能。这样用户就可以进行视频通话并最小化窗口并使用应用程序的正常流程。

4

2 回答 2

0

我假设您不想使用 Intent,因为每当您使用 Intent 移动到活动时,按 Back 键都会移动到上一个活动(活动 C)。在这种情况下,我建议您包含 FLAG_ACTIVITY_CLEAR_TOP 标志。它将破坏所有先前的活动,让您移动到活动 A。

Intent a = new Intent(this,A.class);
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(a);

或者,您可以尝试使用 FLAG_ACTIVITY_REORDER_TO_FRONT 标志,它将移动到活动 A 而不会清除任何活动。

或者,如果您不想创建新实例,那么

在AndroidManifest.xml中设置Activity的launchMode为singleInstance

希望这可以帮助。

或者

1.) 使 B 成为“SingleTask”活动。您可以在 Android 清单中执行此操作。简而言之,这意味着 B 的一个“实例”将永远存在于此任务中。如果 B 在被调用时已经在运行,那么它只会被带到前面。这就是你这样做的方式。

<activity
        android:name=".ui.MyActivity"
        android:launchMode="singleTask"/>

但是你不想只是把 B 带到前面。您想“退回”到 B 以便您的堆栈看起来像

A--> B

2.) 将此标志添加到“开始”B 的意图中。这可确保删除 C 和 D。

intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

现在当 'D' 向 B 调用新的 Intent 时,B 将被恢复,C 和 D 将被删除。B 不会被重新创建,它只会调用 onNewIntent。

或者

您使用 StartActivityForResult() 开始活动

并根据条件您在活动中设置 ResultCodes .. 像这样的东西..

GO_TO_ACT_A=1;GO_TO_ACT_B=2;

并在所有活动 onActivityResultMethod 检查结果代码..

if(resultCode==GO_TO_ACT_A){
    finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}
于 2020-10-21T06:41:59.153 回答
0

我认为你应该在活动 B 和活动 D 上设置标志FLAG_ACTIVITY_REORDER_TO_FRONT。如果这些活动是以前创建的,它们将从活动堆栈中被带到前面。

于 2020-10-21T06:13:27.097 回答