通过关闭上面的所有活动(包括特定活动)再次从堆栈中间重新启动特定 activity

Relaunch specific activity from middle of the stack again by closing all activities above (including specific one)

我有 activity 个堆栈

A>B>C>D>E>F

Αctivity F 我想重新开始 Αctivity C 并关闭所有 C、D、E、F 活动,因此新的 Αctivity 堆栈将是:

A>B>C(C作为新鲜activity)

我尝试使用 singleTaskActivity C,但它没有重新启动 Activity C。它正在恢复 Activity C

使用startActivityForResult启动C、D、E、FActivity

  public static void start(@NonNull Context context, @NonNull Intent intent) {
         context.startActivityForResult(intent, REQUEST_CODE);
        }

当你完成FActivity(你要重新启动C的地方Activity)时调用这个方法

 public static void finishAct(@NonNull Context context) {
       Intent data = new Intent();
        data.putExtra("recreateC", true);
          context.setResult(RESULT_OK, data);
            context.finish();
    }

在 E 和 D 活动中

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 // handle result
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
finishAct(this)
}
}

在 C 中 Activity

  @Override
  protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // handle result
    if (requestCode == REQUEST_CODE && resultCode == Activity.RESULT_OK && data != null && data.getData() != null) {
      finishAct(this)
      // todo start C Activity again 
    }
  }

最后,我来回答我自己的问题。如果有人面临同样的问题,你可以参考答案。

由于我对我想要实现的目标进行了很多研究,我发现重新启动 Activity C 是不可能的。所以我通过将 launchmode singleTask 添加到 Activity 来解决它C. 从 Activity F 我再次启动 activity C 并执行我想在 onNewIntent() 中执行的任务 activity C.

上的重写方法