Expo SDK35安卓端点击TouchableOpacity打开Modal时APP重启求助
安卓端Animated + TouchableOpacity + react-native-modal 崩溃排查方案
我之前在Expo项目里碰到过几乎一模一样的安卓崩溃问题,结合你的日志和代码细节,给你几个针对性的排查方向:
1. 调整动画与Modal的触发时序(最可能解决问题)
你在TouchableOpacity的onPress里同时启动了Animated动画和Modal,安卓端的React Native桥对异步操作的时序兼容性比iOS差很多,动画的帧回调和Modal的挂载逻辑冲突,就会出现日志里的Tried to remove non-existent frame callback错误,最终导致桥销毁APP重启。
试试把Modal的打开逻辑放到动画的start回调里,确保动画执行完成后再触发Modal:
// 修改toggleView方法 toggleView = () => { Animated.timing(this.mode, { toValue: this.mode._value === 0 ? 1 : 0, duration: 1000 }).start(() => { // 动画结束后再调用Modal打开逻辑 this._openModal({ id: "profile", isOpen: true }); }); this.setState({ profileOpen: !this.state.profileOpen }); }; // 修改TouchableOpacity的onPress <TouchableOpacity onPress={() => { this.toggleView(); }}> <Text>Hello World</Text> </TouchableOpacity>
2. 禁用Modal的默认动画避免冲突
react-native-modal自带默认的入场/退场动画,可能和你自定义的Animated View动画产生冲突,试试暂时禁用Modal的动画:
<Modal animationIn="none" animationOut="none" // 你的其他Modal配置项 > {/* Modal内容 */} </Modal>
如果禁用后崩溃消失,就说明是两个动画的底层逻辑冲突,可以自定义Modal的动画,避开和当前Animated的时序重叠。
3. 清理无关的Facebook Graph API请求日志
虽然你没直接引用Graph API,但Expo SDK35默认可能集成了expo-facebook相关依赖,即使你没使用,某些默认初始化逻辑可能触发了无效请求。这个错误本身不会导致崩溃,但可能占用桥资源加剧时序问题:
- 检查
app.json里是否有多余的facebook配置项,移除无用的权限或初始化参数 - 如果确实不需要Facebook功能,卸载
expo-facebook依赖
4. 理解桥销毁错误的根源
日志里的Calling JS function after bridge has been destroyed是崩溃的结果而非原因,本质是前面的帧回调错误导致React Native桥异常终止,只要解决了动画和Modal的时序冲突,这个错误会自动消失。
内容的提问来源于stack exchange,提问作者Hunter Hillman
相关产品推荐
相关产品推荐

