You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android多窗口模式下无法在相邻屏幕打开Activity问题排查

Android分屏模式下跨屏启动Activity问题排查与解答

问题场景

已在多窗口/分屏模式下打开同一应用的两个Activity,期望点击屏幕1的按钮时,在屏幕2打开新的MyActivity,但按官方文档实现后,新Activity仍在屏幕1打开。

已尝试的实现代码

第一种写法

val intent = Intent(this, MyActivity::class.java)
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)

第二种写法

val intent = Intent(Intent.ACTION_VIEW) 
intent.data = Uri.parse(MyActivity::class.java.name)
intent.addFlags(Intent.FLAG_ACTIVITY_LAUNCH_ADJACENT or FLAG_ACTIVITY_NEW_TASK)
startActivity(intent)

已配置的Manifest设置

在application标签及对应activity标签中已设置:

android:resizeableActivity="true"

核心疑问

  1. FLAG_ACTIVITY_NEW_TASK是否为必填参数?
  2. 若不想创建新任务是否可行?

问题原因与解决方案

1. 跨屏启动失效的核心原因

FLAG_ACTIVITY_LAUNCH_ADJACENT仅为系统提供"尝试在相邻窗口启动"的建议,无法强制跨屏。要确保在屏幕2启动,需补充窗口显示模式的明确配置:

正确实现代码

val intent = Intent(this, MyActivity::class.java)
// 若需独立任务栈则保留该标记,否则可根据启动模式调整
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)

// 配置启动选项,指定分屏另一侧或目标屏幕
val options = ActivityOptions.makeBasic()
// 方式1:指定分屏启动模式(强制在分屏窗口打开)
options.setLaunchWindowingMode(WindowManager.LayoutParams.WINDOWING_MODE_SPLIT_SCREEN_SECONDARY)
// 方式2:针对多物理屏幕,可先获取目标屏幕的displayId再设置
// val displayManager = getSystemService(DisplayManager::class.java)
// val displays = displayManager.displays
// if (displays.size > 1) options.setLaunchDisplayId(displays[1].displayId)

startActivity(intent, options.toBundle())

第二种写法的错误说明

用Intent.ACTION_VIEW搭配类名Uri的写法无效,系统无法识别此类Uri来启动指定Activity,应始终使用显式Intent(第一种写法的Intent创建方式)。

2. 关于FLAG_ACTIVITY_NEW_TASK的解答

  • 是否必填?
    非强制,但分屏场景下建议添加。如果启动的Activity启动模式为singleTask/singleInstance,或当前任务栈存在限制,该标记是必需的;普通场景下,添加它能避免新Activity与原任务栈绑定,提升跨屏启动的成功率。
  • 能否不创建新任务?
    可以,但需满足两个条件:原Activity所在任务栈允许添加新Activity(启动模式无singleInstance等限制)、系统允许在同一任务栈的相邻窗口启动。但这种情况下无法保证跨屏,系统可能将新Activity放在原屏幕的同一任务栈窗口中,因此如果必须跨屏,建议保留FLAG_ACTIVITY_NEW_TASK并配合ActivityOptions控制。

内容的提问来源于stack exchange,提问作者M. Usman Khan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 17:20:36