ViroReact应用点击VR场景onExitViro退出按钮触发崩溃求助
问题修复方案
你遇到的退出ViroReact场景崩溃问题在Viro 2.17.0 + React Native 0.59版本的三星安卓机型上非常常见,按以下步骤排查修复即可:
- 修复参数取值错误
你当前代码存在参数取值逻辑问题:在_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, }} /> ); }
- 延迟卸载VR组件避免原生层冲突
老版本ViroReact的安卓原生层渲染和JS层组件卸载不同步,直接修改state卸载ViroVRSceneNavigator时,底层GL上下文还在处理渲染帧就被销毁,会触发原生崩溃,修改_exitViro方法加短时间延迟再修改state:
_exitViro() { // 给原生层留出200ms资源清理时间,再卸载组件 setTimeout(() => { this.setState({ navigatorType: UNSET, }); }, 200); }
如果以上修改后还是崩溃,可以直接修改_exitViro逻辑为返回上一页,跳过组件卸载流程,稳定性更高:
_exitViro() { this.props.navigation.goBack(); }
- 检查安卓配置
打开安卓项目的AndroidManifest.xml,确认主Activity添加了硬件加速配置,缺失该配置会导致三星设备VR场景渲染异常,退出时崩溃:
<activity android:name=".MainActivity" android:hardwareAccelerated="true" 其他原有配置保持不变 >
内容的提问来源于stack exchange,提问作者Roberto
相关产品推荐
相关产品推荐

