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

ViroReact应用点击VR场景onExitViro退出按钮触发崩溃求助

问题修复方案

你遇到的退出ViroReact场景崩溃问题在Viro 2.17.0 + React Native 0.59版本的三星安卓机型上非常常见,按以下步骤排查修复即可:

  1. 修复参数取值错误
    你当前代码存在参数取值逻辑问题:在_getExperienceSelector方法中,你将路由参数ciudad赋值给了img变量,但在_getVRNavigator方法中你又单独从路由取img字段,如果跳转进入当前页面时没有单独传递img参数,这里拿到的img就是undefined,传入VR场景加载纹理后,退出清理资源时会直接触发崩溃。
    修复代码:
_getVRNavigator() {
  const { navigation } = this.props;
  // 统一参数取值,和上层逻辑保持一致,或者确保路由跳转时传入了img字段
  const img = navigation.getParam("ciudad");
  const ciudad = navigation.getParam("ciudad");
  return (
    <ViroVRSceneNavigator
      initialScene={{ scene: InitialVRScene }}
      onExitViro={this._exitViro}
      viroAppProps={{
        img: img,
        ciudad: ciudad,
      }}
    />
  );
}
  1. 延迟卸载VR组件避免原生层冲突
    老版本ViroReact的安卓原生层渲染和JS层组件卸载不同步,直接修改state卸载ViroVRSceneNavigator时,底层GL上下文还在处理渲染帧就被销毁,会触发原生崩溃,修改_exitViro方法加短时间延迟再修改state:
_exitViro() {
  // 给原生层留出200ms资源清理时间,再卸载组件
  setTimeout(() => {
    this.setState({
      navigatorType: UNSET,
    });
  }, 200);
}

如果以上修改后还是崩溃,可以直接修改_exitViro逻辑为返回上一页,跳过组件卸载流程,稳定性更高:

_exitViro() {
  this.props.navigation.goBack();
}
  1. 检查安卓配置
    打开安卓项目的AndroidManifest.xml,确认主Activity添加了硬件加速配置,缺失该配置会导致三星设备VR场景渲染异常,退出时崩溃:
<activity
  android:name=".MainActivity"
  android:hardwareAccelerated="true"
  其他原有配置保持不变
>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:45:03