uni-app 在 App 端原生不支持系统级多窗口任务切换,仅能通过 app.vue 的 onShow/onHide 感知前后台,鸿蒙多窗口需原生插件接入,视频画中画是唯一可行近似方案。

uni-app 在 App 端(Android/iOS)**原生不支持应用内多窗口任务切换**,所谓“多窗口”不是浏览器标签页或桌面级窗口,而是系统级的多任务视图(如 Android 最近任务列表、iOS 多任务卡片)。你无法在 uni-app 里主动创建、管理或切换多个独立窗口实例——这属于原生 OS 能力,uni-app 运行容器(WebView + 原生桥)不具备该权限和接口。
App 端 onShow/onHide 是唯一可靠的多任务感知入口
真正能响应“切后台/切前台”的,只有 app.vue 中的 onShow 和 onHide 生命周期:
- 页面级的
onShow/onHide在 App 端基本不触发,别写在 page 或 component 里 -
onHide触发 ≠ 应用被杀死,只是进入后台;onShow触发 ≈ 用户切回前台(但 iOS 锁屏唤醒、通知中心下拉返回时可能漏掉) - 不要在
onHide里执行上传、清理等耗时操作——系统可能直接终止进程,只建议设标记或发事件 - 若需区分「后台」和「完全退出」,可用
plus.runtime.getProperty('state')(HBuilderX 3.1.22+),值为"background"或"active"
鸿蒙平台暂无标准多窗口 API 支持
当前(2026 年中)uni-app 对鸿蒙的多窗口能力仍处于实验阶段:
- 鸿蒙原生支持分屏、悬浮窗、多实例,但 uni-app 未封装对应 API(如
ohos.ability.WindowStage) - 官方文档和插件市场均无稳定版「多窗口管理器」插件,所谓「监听窗口变化事件」实际依赖自定义原生扩展
- 若真需鸿蒙多窗口,必须通过
uni-app 原生插件开发接入 ArkTS 侧 WindowStage 控制逻辑,且需适配不同鸿蒙版本(OpenHarmony vs HarmonyOS Next)
视频小窗是唯一接近「多窗口」的可行方案
用户感知上最像多窗口的,其实是 video 的画中画(PiP)模式,但它本质仍是单窗口内的 DOM 层级浮动:
- H5 和 App 端可用
picture-in-picture-mode属性 +@pipmodechange监听,但需平台支持(Android 8.0+、iOS 14+、部分鸿蒙版本) - 更通用的做法是用
uni.createVideoContext+position: fixed模拟小窗,注意设置zIndex防遮挡 - 小窗拖拽需手动实现
@touchstart/@touchmove计算偏移,不能依赖原生 PiP 的手势 - 微信小程序等平台完全不支持该模式,跨端一致性差
真正的多窗口切换能力,取决于原生容器是否开放了窗口管理权限。uni-app 当前定位是跨端 UI 框架,不是原生窗口调度器——所有试图绕过系统限制的“伪多窗口”,最终都会卡在生命周期不可靠、状态丢失或审核拒绝上。


















