Android N开发人员预览版1的文档表明您可以使用Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT来请求Android将活动发布到单独的窗口(自由格式)或相邻窗格(分屏). Google的示例代码显示使用Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT | Intent.FLAG_ACTIVITY_NEW_TASK来实现这一目标.
如果正在启动的活动与执行启动的活动不同,则此方法正常.
因此,例如,如果您有一个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并且新活动实例进入现有窗口或窗格.
但是,如果您启动任何其他活动(例如,SecondActivity.class),则FLAG_ACTIVITY_LAUNCH_ADJACENT的工作方式与宣传的相同.
如果您希望允许用户打开两个电子表格,两个笔记本或两个来自您的应用程序的内容,该怎么办?我们如何使用FLAG_ACTIVITY_LAUNCH_ADJACENT启动同一活动的两个实例?
解决方法
根据
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);
然后两个活动实例将在单独的窗口/窗格/中.
This sample project为N Developer Preview 1演示了这一点.