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

iOS平台使用QML StackView与VideoOutput切换页面时崩溃求助

解决iOS上StackView切换页面时VideoOutput导致的崩溃问题

问题分析

你遇到的崩溃确实和iOS的多媒体资源管控逻辑有关。iOS不允许未被正确释放的多媒体组件在后台留存,仅设置camera.active: false不足以彻底清理VideoOutput和CaptureSession关联的底层硬件资源,当StackView移除页面时,这些未妥善处理的资源会触发内存访问错误(对应报错signal -111)。

解决方案

需要在页面切换或销毁前,彻底断开CaptureSession与VideoOutput的关联,停止Camera访问,并确保相关组件的资源被正确释放。以下是两种可行的实现方式:

方式一:切换页面时手动清理资源

修改page2.qml中的按钮点击事件,先执行资源清理操作,再触发页面切换:

RoundButton {
    id: capture
    text: "CRASHES WHEN I CLICK THIS BUTTON - go to page 3"
    z: 2
    onClicked: {
        // 断开CaptureSession与VideoOutput的绑定
        captureSession.videoOutput = null;
        // 停止Camera硬件访问
        camera.active = false;
        // 短暂延迟确保资源释放(可选,视实际情况调整时长)
        setTimeout(() => {
            stack.replace("page3.qml");
        }, 100);
    }
}

方式二:页面销毁时自动清理

在page2的根Item中添加销毁信号处理,确保页面被移除时自动完成资源清理:

Item {
    // ... 原有组件代码 ...

    Component.onDestruction: {
        captureSession.videoOutput = null;
        camera.active = false;
    }
}

补充提示

  • iOS对Camera、VideoOutput这类硬件相关组件的生命周期管控极为严格,必须保证组件不再使用时,彻底断开所有关联并停止硬件占用。
  • 如果上述方案仍存在问题,可以尝试在清理步骤后手动调用videoOutput.destroy()或camera.destroy(),强制销毁组件以释放底层资源。

内容的提问来源于stack exchange,提问作者zeroalpha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 18:45:21