我能找到的最好的解决方法是用 FLAG_ACTIVITY_TASK_ON_HOME 标记最终任务,就我而言,这恰好是出发点在后台堆栈中的任务。这并不完全是问题的答案,但如果您试图从后台清除不稳定的工作流程,并且您不希望用户随后在后台“退出”您的应用程序,这是一个可行的选择。在此处查看有关该主题的主题:Android - Clearing Navigation Backstack
编辑:下面的代码创建了我刚刚注意到的单独的应用程序实例;不知道有没有办法防止这种情况发生。
我想出的解决方案是使用你在清单 xml 中设置的 taskAffinity:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="co.example.app">
<activity
android:name=".activities.SplashActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_main">
</activity>
<activity
android:name=".activities.MainActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_main">
</activity>
<activity
android:name=".activities.WorkflowStepOneActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_main">
</activity>
<activity
android:name=".activities.WorkflowStepTwoActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_workflow">
</activity>
<activity
android:name=".activities.WorkflowStepThreeActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_workflow">
</activity>
<activity
android:name=".activities.LeaveWorkflowActivity"
android:launchMode="singleTop"
android:taskAffinity="@string/affinity_main">
</activity>
</manifest>
启动应用程序的主要关联性可能会收集在没有声明关联性的任务中启动的任何活动,但是当我想为我的工作流启动一个新的关联性时,我会在意图中添加新任务:
在 MainActivity 或我调用工作流的任何地方:
public void startWorkflow() {
Intent intent = new Intent(MainActivity.this,
WorkflowStepOneActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
在中间工作流程步骤中,我们没有做任何特别的事情:
public void startWorkflowTwo() {
Intent intent = new Intent(MainActivity.this,
LeaveWorkflowActivity.class);
startActivity(intent);
}
最后,在为 post-workflow 活动触发 Intent 之后,我们在 LAST 工作流活动中调用 Affinity 上的完成:
public void startWorkflowCompleted() {
Intent intent = new Intent(MainActivity.this,
WorkflowCompletedActivity.class);
startActivity(intent);
finishAffinity();
}
这意味着我们的堆栈将如下所示:
SplashActivity -> MainActivity -> LeaveWorkflowActivity