Bridgeless mode: async JS "stacking up" when MainActivity is in the background
还没有人认领这个 Issue。
- 主要语言
- C++
- 星标
- 127k
- 派生
- 25.3k
- 平均合并
- 1 天 23 小时
- 30 天内合并 PR
- 4
描述
Description
Hi everyone,
I'm encountering a really strange issue and hoping someone here might have some insight.
Here's the problem: In any new React Native app generated using @react-native-community/cli, when a secondary Activity is presented (and the main Activity is in the background), asynchronous JavaScript code seems to stop functioning correctly. It appears to "stack up" and only executes after the secondary Activity is dismissed.
For context, I'm developing a React Native package that has worked without this issue for the past two years. My local test app also works fine, and many users are using it successfully on modern React Native versions (I know of at least one on 0.76.7). This issue seems specific to freshly created apps.
I've created a minimal repo to reproduce the problem: https://github.com/descorp/RNAlertTest.
Interestingly, one user reported that turning off the "new Architecture" resolved this "thread freezing" problem for them, but I haven't been able to reproduce this fix locally.
My suspicion is that something has changed in the project generation process with @react-native-community/cli compared to the older npx react-native init, but I'm not sure what it could be.
Has anyone else experienced anything similar or have any ideas on what might be causing this? Any help would be greatly appreciated!
Steps to reproduce
- Clone https://github.com/descorp/RNAlertTest
- Run
yarn && yarn android - Press button to open dialog
- Press "Send event" on dialog and observe new messages console log
- Press "Send event async" on dialog and observe no new messages console log
- Dismiss dialog
- Observe debug console will all "stacked" async messages
Abstract:
- Initiate new project
- Add native module that presents activity above MainActivity (if there is a faster way, use it 😅).
- Open app and call new activity
- Call any async code (e.x.
await sleep(100)orfetch('www.google.com')) - Observe async code executed only after MainActivity on foreground
React Native Version
0.78.2
Affected Platforms
Runtime - Android
Output of npx @react-native-community/cli info
System:
OS: macOS 15.3.2
CPU: (16) arm64 Apple M4 Max
Memory: 185.73 MB / 64.00 GB
Shell:
version: "5.9"
path: /bin/zsh
Binaries:
Node:
version: 22.11.0
path: /usr/local/adyen/nodejs/bin/node
Yarn: Not Found
npm:
version: 11.0.0-pre.0
path: /usr/local/adyen/npm/bin/npm
Watchman: Not Found
Managers:
CocoaPods:
version: 1.14.3
path: /Users/vladimir/.local/share/gem/ruby/3.2.0/bin/pod
SDKs:
iOS SDK:
Platforms:
- DriverKit 24.1
- iOS 18.1
- macOS 15.1
- tvOS 18.1
- visionOS 2.1
- watchOS 11.1
Android SDK:
API Levels:
- "33"
- "34"
- "35"
Build Tools:
- 30.0.3
- 33.0.1
- 34.0.0
- 35.0.0
- 35.0.0
- 36.0.0
System Images:
- android-34 | Google Play ARM 64 v8a
Android NDK: Not Found
IDEs:
Android Studio: Not Found
Xcode:
version: 16.1/16B40
path: /usr/bin/xcodebuild
Languages:
Java:
version: 21.0.6
path: /usr/bin/javac
Ruby:
version: 3.2.2
path: /usr/local/adyen/bin/ruby
npmPackages:
"@react-native-community/cli": Not Found
react:
installed: 18.2.0
wanted: 18.2.0
react-native:
installed: 0.74.7
wanted: 0.74.7
react-native-macos: Not Found
npmGlobalPackages:
"*react-native*": Not Found
Android:
hermesEnabled: true
newArchEnabled: false
Stacktrace or Logs
LOG AppState active
LOG
LOG Timer works before async
LOG Custom activity started
LOG AppState background
LOG Event sync
LOG Event sync
LOG AppState active
LOG Timer works after async
LOG Event async
LOG Event async
Reproducer
https://github.com/descorp/RNAlertTest
Screenshots and Videos
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
克隆 RNAlertTest 并运行 yarn && yarn android,以便在对话框 activity 打开时重现同步事件与异步事件之间的差异。从报告中描述的 MainActivity、辅助 activity 和新架构设置开始;完成的标准是:主 activity 处于后台时异步消息会执行,而不是等到对话框被关闭后才执行。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- android, javascript, react-native
- 领域
- mobile
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 活跃
- 描述清晰度
- 基本清楚
- 新手友好度
- 48/100