Android在任务之间切换

Android在任务之间切换,android,android-activity,back-stack,android-task,taskaffinity,Android,Android Activity,Back Stack,Android Task,Taskaffinity,我正试图找到一种在android中切换任务的方法 假设我有活动A,B,C,D 活动A和B在一个任务中(关联) 而C和D在另一个任务中 这是创建新任务的C活动的清单代码 <activity android:name=".CActivity" android:launchMode="singleTask" android:taskAffinity="com.new" />

我正试图找到一种在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在另一个任务中创建。现在,我们需要在不创建新的B实例的情况下从D切换到B。也可以在不创建新的D实例的情况下从a切换到D

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


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

我认为您应该在活动B和活动D上设置flag
flag\u ACTIVITY\u REORDER\u TO \u FRONT
。如果这些活动是以前创建的,它们将从活动堆栈带到前面。

我假设您不想使用意图,因为每当您使用意图移动到活动时,按后退键将移动到上一个活动(活动C)。在这种情况下,我建议您包括FLAG\u ACTIVITY\u CLEAR\u TOP FLAG。它将销毁之前的所有活动,并允许您移动到活动A

Intent a = new Intent(this,A.class);
     a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
     startActivity(a);
或者,您可以尝试使用标志\u ACTIVITY\u REORDER\u TO\u FRONT标志,该标志将在不清除任何活动的情况下移动到活动A

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


在AndroidManifest.xml中将活动的启动模式设置为singleInstance

希望这有帮助

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

<activity
        android:name=".ui.MyActivity"
        android:launchMode="singleTask"/>
现在,当“D”向B调用新的意图时,B将恢复,C和D将被删除。不会重新创建B,它只会调用onNewIntent

您可以使用StartActivityForResult()启动活动

并根据您在“活动”中设置结果代码的条件。。像这样的

采取行动A=1;去行动B=2

并在ActivityResultMethod上的所有活动中检查结果代码

if(resultCode==GO_TO_ACT_A){
    finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}

当我打算从D到B,并在前面标记“活动”时,它会在任务2中的B上创建一个新实例。您以前创建过B实例吗?因为如果不是,那么它最终必须被创建。我已经在堆栈1上创建了B实例。实际顺序首先在堆栈1上创建A,然后在堆栈1上创建B。现在,我在堆栈2中创建了C,然后在堆栈2中创建了D,但我不明白为什么有两个堆栈?这是两个不同的应用还是什么?谢谢你试着理解我的问题。这两个堆栈来自同一个应用程序。我使用两个的原因是一个是我的普通应用程序,另一个是我应用程序中的视频通话功能。这样用户可以进行视频通话&最小化窗口并使用应用程序的正常流程。我不想创建活动的新实例或清除它们。我只想在任务之间切换。当我使用D中的“FLAG_ACTIVITY_REORDER_to_FRONT”时,它会在堆栈2中创建一个新的B实例。在AndroidManifest.xml中将Activities的launchMode设置为singleInstance,希望这能有所帮助。答案已编辑。请检查@Deejayen
if(resultCode==GO_TO_ACT_A){
    finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}