diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 7f2be705b81..a899e813010 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -197,6 +197,7 @@ public abstract interface class com/facebook/react/ReactHost { public abstract fun getDevSupportManager ()Lcom/facebook/react/devsupport/interfaces/DevSupportManager; public abstract fun getJsEngineResolutionAlgorithm ()Lcom/facebook/react/JSEngineResolutionAlgorithm; public abstract fun getLifecycleState ()Lcom/facebook/react/common/LifecycleState; + public abstract fun getMemoryPressureRouter ()Lcom/facebook/react/MemoryPressureRouter; public abstract fun getReactQueueConfiguration ()Lcom/facebook/react/bridge/queue/ReactQueueConfiguration; public abstract fun onActivityResult (Landroid/app/Activity;IILandroid/content/Intent;)V public abstract fun onBackPressed ()Z @@ -1922,7 +1923,6 @@ public class com/facebook/react/config/ReactFeatureFlags { public static field excludeYogaFromRawProps Z public static field rejectTurboModulePromiseOnNativeError Z public static field traceTurboModulePromiseRejections Z - public static field unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix Z public static field unstable_enableTurboModuleSyncVoidMethods Z public static field unstable_useFabricInterop Z public static field unstable_useTurboModuleInterop Z diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt index b66775c2e76..5f09366417a 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/ReactHost.kt @@ -48,6 +48,9 @@ public interface ReactHost { /** [JSEngineResolutionAlgorithm] used by this host. */ public var jsEngineResolutionAlgorithm: JSEngineResolutionAlgorithm? + /** Routes memory pressure events to interested components */ + public val memoryPressureRouter: MemoryPressureRouter + /** To be called when back button is pressed */ public fun onBackPressed(): Boolean diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index ad6e2361814..9c5a562404d 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -66,9 +66,6 @@ public class ReactFeatureFlags { */ public static boolean enableBridgelessArchitecture = false; - /** Server-side gating for a hacky fix to an ANR in the bridgeless core, related to Bolts task. */ - public static boolean unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix = false; - /** * Does the bridgeless architecture log soft exceptions. Could be useful for tracking down issues. */ diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java index 3379c3b8b59..95fcac63cc5 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/runtime/ReactHostImpl.java @@ -135,7 +135,7 @@ public class ReactHostImpl implements ReactHost { new ReactLifecycleStateManager(mBridgelessReactStateTracker); private final int mId = mCounter.getAndIncrement(); private @Nullable JSEngineResolutionAlgorithm mJSEngineResolutionAlgorithm = null; - private MemoryPressureListener mMemoryPressureListener; + private @Nullable MemoryPressureListener mMemoryPressureListener; private @Nullable DefaultHardwareBackBtnHandler mDefaultHardwareBackBtnHandler; private final Set> mBeforeDestroyListeners = @@ -178,11 +178,6 @@ public class ReactHostImpl implements ReactHost { mReactJsExceptionHandler = reactJsExceptionHandler; mQueueThreadExceptionHandler = ReactHostImpl.this::handleHostException; mMemoryPressureRouter = new MemoryPressureRouter(context); - mMemoryPressureListener = - level -> - callWithExistingReactInstance( - "handleMemoryPressure(" + level + ")", - reactInstance -> reactInstance.handleMemoryPressure(level)); mAllowPackagerServerAccess = allowPackagerServerAccess; if (DEV) { mDevSupportManager = @@ -386,6 +381,7 @@ public class ReactHostImpl implements ReactHost { return surface; } + @Override public MemoryPressureRouter getMemoryPressureRouter() { return mMemoryPressureRouter; } @@ -1030,11 +1026,10 @@ public class ReactHostImpl implements ReactHost { mUseDevSupport, getOrCreateReactHostInspectorTarget()); - if (ReactFeatureFlags - .unstable_bridgelessArchitectureMemoryPressureHackyBoltsFix) { - mMemoryPressureListener = createMemoryPressureListener(instance); - } - mMemoryPressureRouter.addMemoryPressureListener(mMemoryPressureListener); + MemoryPressureListener memoryPressureListener = + createMemoryPressureListener(instance); + mMemoryPressureListener = memoryPressureListener; + mMemoryPressureRouter.addMemoryPressureListener(memoryPressureListener); log(method, "Loading JS Bundle"); instance.loadJSBundle(bundleLoader); @@ -1366,8 +1361,10 @@ public class ReactHostImpl implements ReactHost { task -> { reactInstanceTaskUnwrapper.unwrap(task, "4: Destroying ReactContext"); - log(method, "Removing memory pressure listener"); - mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener); + if (mMemoryPressureListener != null) { + log(method, "Removing memory pressure listener"); + mMemoryPressureRouter.removeMemoryPressureListener(mMemoryPressureListener); + } final ReactContext reactContext = mBridgelessReactContextRef.getNullable(); if (reactContext != null) {