如何在 Android N Multi-Window 中将相同的 Activity 发射到单独的 Window?

How Do I Launch the Same Activity Into a Separate Window in Android N Multi-Window?

Android N Developer Preview 1 的文档表明您可以使用 Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT 请求 Android 将 activity 启动到单独的 window(自由格式)或相邻窗格(分屏)。 Google 的示例代码显示使用 Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK 来完成此操作。

如果正在启动的 activity 与启动的 class 不同,则此操作正常。

因此,例如,如果您的 MainActivity 具有以下代码以启动其自身的单独实例:

  Intent i=
    new Intent(this, MainActivity.class)
      .setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
        Intent.FLAG_ACTIVITY_NEW_TASK);

  startActivity(i);

那么结果是 FLAG_ACTIVITY_LAUNCH_ADJACENT 被忽略,新的 activity 实例进入现有的 window 或窗格。

但是,如果您启动任何其他 activity(例如,SecondActivity.class),则 FLAG_ACTIVITY_LAUNCH_ADJACENT 会像宣传的那样工作。

如果您想让用户从您的应用程序中打开两个电子表格、两个记事本或两个其他东西怎么办?我们如何使用 FLAG_ACTIVITY_LAUNCH_ADJACENT 启动相同 activity 的两个实例?

根据this issue上的讨论,你还需要融入FLAG_ACTIVITY_MULTIPLE_TASK:

  Intent i=
    new Intent(this, MainActivity.class)
      .setFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT |
        Intent.FLAG_ACTIVITY_NEW_TASK |
        Intent.FLAG_ACTIVITY_MULTIPLE_TASK);

  startActivity(i);

然后两个 activity 实例将在单独的 windows/panes/whatever.

This sample project 为 N Developer Preview 1 演示了这一点。