为什么在android中调用本机模块后js事件循环冻结react-native

问题描述

我有这个代码(这里只是伪代码):

JavaSDK.java

renderUI();
emmitReactNativeEvent();

ReactNative.ts

const sleep = (time: number) => {
  return new Promise((resolve) => setTimeout(resolve,time))
}

emmiter.on('react-native-event',() => {
  console.log('Inside-Before');
  sleep(1000);
  console.log('Inside-After');
  JavaSDK.finish();
}

JavaSDK.init();

当我执行 ReactNative.ts 脚本时,我观察到了奇怪的行为。

执行是这样的:

  • 创建事件监听器
  • 调用本机库,该库将显示本机 UI(不仅仅是组件,而是整个屏幕)
  • 当本机代码正在执行时,它会发出事件
  • RN 中的回调将在来自 JavaSDK 的 UI 后面的后台执行
  • 回调完成后调用JavaSDK方法关闭原生UI

现在的问题是 setTimeout()setInterval() 似乎根本不起作用。回调在打印 Inside-Before 时被调用,但随后卡在 sleep() 上并且永远不会完成......

我还尝试将 setInterval() 与一些控制台日志一起使用并在运行 JavaSDK 之前调用它...一旦 SDK 被初始化,控制台日志就会停止打印 - 似乎 setInterval() 已暂停...但是在 JavaSDK 完成后,控制台日志恢复...

知道发生了什么吗?我该如何解决。我希望能够在我的回调中使用 setTimeout

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)