Skip to content
阅读进度

指定屏幕启动为何仍可能复用旧任务? ​

返回 多屏互动项目 目录

标准回答 ​

ActivityOptions.setLaunchDisplayId 表达目标显示器的启动意图,但最终结果还受系统支持、显示器访问权限、Activity 启动模式、Intent flags、现有任务和调用上下文影响。不能把一次 API 调用等同于新建一个独立页面实例。

分析异常时应先确认是新建 Activity、将已有实例置前、收到 onNewIntent,还是任务迁移。再检查任务 affinity、singleTop / singleTask、NEW_TASK / CLEAR_TOP 等组合。修改 flags 之前,先写出预期的历史栈和返回行为,避免为修复显示位置而破坏导航。

最小验证矩阵包括:目标页面不存在、已在源屏、已在目标屏、同包多任务、目标屏移除、调用方进入后台。记录启动请求与系统最终任务位置,才能区分业务请求错误、复用策略和平台限制。

追问与回答 ​

在 Application Context 中启动需要注意什么 ​

普通场景通常需要 NEW_TASK,并且不能沿用某个 Activity 的任务上下文;仍需核对后台启动和显示器权限。系统定制行为需单独验证。

能否每次都强制结束再重建 ​

会引入状态丢失、冷启动成本与可见闪烁。先确认是否确实需要新实例;保留状态的迁移和幂等激活通常更符合流转语义。

易混淆点 ​

  • 用 flags 组合试错,却不检查真实任务栈。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。