diff --git a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java index 031030f2faa..03665bd10cb 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -70,4 +70,12 @@ public class ReactFeatureFlags { * and the CatalystInstance will always be destroyed in some future release. */ public static boolean nullifyCatalystInstanceOnDestroy = false; + + /** + * Temporary flag that should be removed soon. See FabricUIManager: if this flag is disabled, + * mountItems scheduled on the UI thread will *always* be executed synchronously. If this flag is + * enabled, users of FabricUIManager may disable immediate execution of scheduled mount items. + * TODO T54997838: remove as followup + */ + public static boolean allowDisablingImmediateExecutionOfScheduleMountItems = false; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java index 09f1bc08511..1acbd252d97 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -533,8 +533,14 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { mMountItems.add(mountItem); } - if (mImmediatelyExecutedMountItemsOnUI && UiThreadUtil.isOnUiThread()) { - dispatchMountItems(); + if (UiThreadUtil.isOnUiThread()) { + // We only read these flags on the UI thread. + boolean immediateExecutionEnabled = + !ReactFeatureFlags.allowDisablingImmediateExecutionOfScheduleMountItems + || mImmediatelyExecutedMountItemsOnUI; + if (immediateExecutionEnabled) { + dispatchMountItems(); + } } // Post markers outside of lock and after sync mounting finishes its execution