外观
指定屏幕启动为何仍可能复用旧任务?
标准回答
ActivityOptions.setLaunchDisplayId 表达目标显示器的启动意图,但最终结果还受系统支持、显示器访问权限、Activity 启动模式、Intent flags、现有任务和调用上下文影响。不能把一次 API 调用等同于新建一个独立页面实例。
分析异常时应先确认是新建 Activity、将已有实例置前、收到 onNewIntent,还是任务迁移。再检查任务 affinity、singleTop / singleTask、NEW_TASK / CLEAR_TOP 等组合。修改 flags 之前,先写出预期的历史栈和返回行为,避免为修复显示位置而破坏导航。
最小验证矩阵包括:目标页面不存在、已在源屏、已在目标屏、同包多任务、目标屏移除、调用方进入后台。记录启动请求与系统最终任务位置,才能区分业务请求错误、复用策略和平台限制。
追问与回答
在 Application Context 中启动需要注意什么
普通场景通常需要 NEW_TASK,并且不能沿用某个 Activity 的任务上下文;仍需核对后台启动和显示器权限。系统定制行为需单独验证。
能否每次都强制结束再重建
会引入状态丢失、冷启动成本与可见闪烁。先确认是否确实需要新实例;保留状态的迁移和幂等激活通常更符合流转语义。
易混淆点
- 用 flags 组合试错,却不检查真实任务栈。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q110