You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

react-native-worklets v0.5.1中使用scheduleOnRN替代runOnJS导致Android应用崩溃问题求助

react-native-worklets v0.5.1中使用scheduleOnRN替代runOnJS导致Android应用崩溃问题求助

各位好,我最近在开发React Native项目时遇到了一个棘手的问题,想请教下社区的大佬们。

问题背景

我在使用react-native-worklets@0.5.1时,ESLint一直提示runOnJS已经被弃用,虽然原来的代码运行完全正常,但不想一直靠禁用ESLint单条规则来忽略警告。于是我查看了node_modules里的函数注释,发现官方明确标注runOnJS已废弃,推荐用scheduleOnRN作为替代方案。

但替换之后,奇怪的问题出现了:Web端运行完全没问题,但在Android模拟器的Expo Go里,只要一调用scheduleOnRN,应用就直接崩溃——哪怕我传一个空的回调函数进去,结果还是一样崩溃。

崩溃日志

adb logcat里拿到的崩溃信息如下:

09-26 07:31:52.589 25933 25933 F libc : Fatal signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0x394d28b2cca5d879 in tid 25933 (st.exp.exponent), pid 25933 (st.exp.exponent)

项目相关依赖版本

  • react-native: 0.81.4
  • expo: ~54.0.10
  • react-native-worklets: 0.5.1
  • react-native-reanimated: ~4.1.0

关键代码片段

原正常运行的runOnJS代码(仅ESLint弃用警告)

// 省略上下文代码,仅保留关键部分
if (isFinished) {
  runOnJS(() => {
    setMounted(false);
    hideToaster();
  });
}

替换为scheduleOnRN后的崩溃代码

// 替换后,Web正常,Android一执行就崩溃
if (isFinished) {
  scheduleOnRN(() => {
    setMounted(false);
    hideToaster();
  });
}

我甚至试过最简化的空回调调用,依然触发崩溃:

scheduleOnRN(() => {}); // Android模拟器执行到该行直接崩溃

已尝试的排查操作

  • 确认runOnJS本身功能正常,仅存在弃用警告
  • 尝试传递空回调给scheduleOnRN,问题依旧
  • 清理Expo缓存、重新安装依赖,崩溃现象未消失

有没有大佬遇到过类似的问题?或者有没有runOnJS的正确替代方案?麻烦指点一下,谢谢!

火山引擎 最新活动