Repository navigation
fix(mobile): stop MainActivity.onDestroy from throwing under bridgeless - #14678
Merged
Merged
Conversation
onDestroy emitted ForceQuitDetected through reactInstanceManager. With the new architecture on (1.5.189), ReactDelegate is built from a ReactHost and has no ReactNativeHost, so getReactInstanceManager() throws IllegalStateException and any non-configuration-change destroy crashes. Nothing in JS has listened for ForceQuitDetected since #13539, so drop the override. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
dylanjeffers
marked this pull request as ready for review
October 19, 2026 20:30
dylanjeffers
added a commit
that referenced
this pull request
Oct 19, 2026
## Summary Version bump for native release **1.5.190**. Merging it starts the RC and production native builds. - `packages/mobile/package.json`: 1.5.189 → 1.5.190 (and the matching `package-lock.json` entry) - iOS `CFBundleShortVersionString`: 1.1.202 → 1.1.203 - Android `versionName`: 1.1.538 → 1.1.539 ## Contents - #14681: Reanimated 4.3.4 + Worklets 0.8.3, bottom-sheet 5.2.14, the collapsible-tabs Reanimated 4 port, and mobile TypeScript 5.4.5 - #14680: drop the Android predictive-back opt-out - #14682: FlashList 2.3.3. JS only, but it lands here so it ships in the same RC. Podfile.lock drops RNFlashList. - main through 4a19802, including #14678 (the Android `onDestroy` crash under bridgeless) ## Release plan Both stores are still on 1.5.186 (iOS 1.1.199, Android 1.1.535), so we skip a 1.5.189 store release and ship 1.5.190 directly. The 1.5.189 RC builds stay in TestFlight and Play internal as the comparison build. If something regresses on 1.5.190, check it on 1.5.189 to tell a Reanimated 4/FlashList change from a new-architecture one. Device QA on the 1.5.190 RC covers the 1.5.189 checklist (#14656/#14657) plus the Reanimated 4 list in #14681. Then submit to both stores with phased/staged rollouts. 1.5.186 users keep getting production OTAs through the `binary_version` path until they update. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
MainActivity.onDestroyemittedForceQuitDetectedthroughreactInstanceManager.currentReactContext. With the New Architecture on (1.5.189),ReactActivityDelegatebuilds itsReactDelegatefrom aReactHostonly.ReactDelegate.getReactInstanceManager()then throwsIllegalStateException("Cannot get ReactInstanceManager without a ReactNativeHost."), so every destroy that isn't a configuration change crashes the process.The likely trigger is the activity being destroyed while
MusicServicekeeps the process alive: swiping the app out of Recents during playback, or the system reclaiming the activity in the background. Either way it kills playback.Nothing in JS has listened for
ForceQuitDetectedsince #13539, so this removes the override (and its two imports) instead of porting it toReactHost.Same class of bug as the RNTP bridgeless fix (#14647). This was the only other
reactInstanceManageruse in our Android sources, and the iOS sources have no bridge-only calls.Shipping
It's a native-only change, so it ships in a native build. It's based on main, so it can go into a 1.5.189 rebuild if 1.5.189 isn't submitted yet, or otherwise into 1.5.190. Once 1.5.189 has some Android users, look in Play Console › Android vitals for
IllegalStateExceptioninReactDelegate.getReactInstanceManager/MainActivity.onDestroyto confirm the impact.Test plan
MainActivity.onDestroy/IllegalStateException🤖 Generated with Claude Code