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

使用flutter_unity_widget让Unity后台运行致Flutter应用随机崩溃求助

问题:使用flutter_unity_widget让Unity后台运行时应用随机崩溃

崩溃日志:

E/AndroidRuntime( 7094): Timestamp: 2022-12-02 14:52:49+0530
E/AndroidRuntime( 7094): pid: 7094, tid: 7444, name: UnityMain  >>> com.exmaple.app <<<
E/AndroidRuntime( 7094): uid: 10157
E/AndroidRuntime( 7094): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x319
E/AndroidRuntime( 7094): Cause: null pointer dereference
E/AndroidRuntime( 7094):     x0  0000000000000001  x1  0000007130000010  x2  0000000000000001  x3  00000071ac8229a3
E/AndroidRuntime( 7094):     x4  000000000000017a  x5  000000000010c242  x6  731f64716e6c1f6c  x7  7f7f7f7f7f7f7f7f
E/AndroidRuntime( 7094):     x8  0000000000000001  x9  7a554df95e9d0d6c  x10 0000000000000000  x11 0000000000000000
E/AndroidRuntime( 7094):     x12 000000752528acc0  x13 00000000000000c1  x14 000000752528ad70  x15 0000006f89f93da5
E/AndroidRuntime( 7094):     x16 00000071aca77950  x17 0000007865c48ebc  x18 0000000000000000  x19 00000071acaa36c0
E/AndroidRuntime( 7094):     x20 b4000071c69c4aa0  x21 00000071acaa3768  x22 0000000000000063  x23 00000071aca92890
E/AndroidRuntime( 7094):     x24 0000000000000010  x25 0000000000000018  x26 0000000000000018  x27 00000071aca940c6
E/AndroidRuntime( 7094):     x28 0000000000000018  x29 0000000000003234
E/AndroidRuntime( 7094):     sp  000000752528c6c0  lr  00000071ac1825cc  pc  00000071ac182614

背景

为节省后续使用时的等待时间,我们需要提前在Unity中初始化部分耗时较长的SDK,因此采用flutter_unity_widget让Unity后台运行。此前未让Unity后台运行时,应用运行完全正常。


可能的解决方向

  • 排查后台资源访问问题
    SIGSEGV空指针解引用通常是因为Unity后台运行时,某些依赖前台上下文的资源(如UI组件、渲染对象)被尝试访问但已释放或未初始化。在Unity侧添加状态判断,后台时仅保留SDK初始化的核心逻辑,暂停所有依赖前台渲染的操作。

  • 调整Unity后台运行配置
    在Unity的Player Settings中,找到Android平台的Background Behavior设置,开启Run In Background的同时,禁用后台不必要的渲染和资源加载,限制后台CPU、GPU占用,避免系统回收资源导致崩溃。

  • 优化SDK初始化逻辑
    将SDK初始化拆分为独立的后台安全模块,确保初始化过程仅涉及数据处理和SDK接口调用,不调用任何Unity渲染、UI相关API。

  • 监听Flutter应用生命周期
    在Flutter侧监听前后台切换事件,通过flutter_unity_widgetAPI在后台时暂停Unity非必要操作,前台时恢复。示例代码:

    WidgetsBinding.instance.addObserver(LifecycleEventHandler(
      resumeCallBack: () {
        // 恢复Unity相关操作
      },
      pauseCallBack: () {
        // 暂停Unity非必要操作
      },
    ));
    
    class LifecycleEventHandler extends WidgetsBindingObserver {
      final VoidCallback? resumeCallBack;
      final VoidCallback? pauseCallBack;
    
      LifecycleEventHandler({this.resumeCallBack, this.pauseCallBack});
    
      @override
      void didChangeAppLifecycleState(AppLifecycleState state) {
        switch (state) {
          case AppLifecycleState.resumed:
            resumeCallBack?.call();
            break;
          case AppLifecycleState.paused:
            pauseCallBack?.call();
            break;
          default:
            break;
        }
      }
    }
    
  • 检查版本兼容性
    确认flutter_unity_widget版本与当前Flutter、Unity版本兼容,尝试升级到最新稳定版,该问题可能已在新版本中修复。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 16:20:36