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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:33:50