From 8a02450fbb273e9df59538c8bf00aa49bcbdaeae Mon Sep 17 00:00:00 2001 From: Joshua Gross Date: Fri, 29 May 2020 15:44:39 -0700 Subject: [PATCH] Stop all surfaces when tearing down FabricUIManager Summary: Teardown any remaining surfaces when tearing down FabricUIManager. Changelog: [Internal] Reviewed By: mdvacca Differential Revision: D21774541 fbshipit-source-id: cfd544f1721599521e0fd6677d45208e51b8340d --- .../com/facebook/react/config/ReactFeatureFlags.java | 3 +++ .../java/com/facebook/react/fabric/FabricUIManager.java | 9 +++++++++ 2 files changed, 12 insertions(+) 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 c06d0e0c350..7705d229527 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java +++ b/ReactAndroid/src/main/java/com/facebook/react/config/ReactFeatureFlags.java @@ -89,4 +89,7 @@ public class ReactFeatureFlags { /** Feature flag to configure initialization of Fabric surfaces. */ public static boolean enableFabricStartSurfaceWithLayoutMetrics = true; + + /** Feature flag to have FabricUIManager teardown stop all active surfaces. */ + public static boolean enableFabricStopAllSurfacesOnTeardown = 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 b80ee9f25c5..a556eb5fc24 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/FabricUIManager.java @@ -286,6 +286,15 @@ public class FabricUIManager implements UIManager, LifecycleEventListener { // memory immediately. mDispatchUIFrameCallback.stop(); + // Stop all attached surfaces + if (ReactFeatureFlags.enableFabricStopAllSurfacesOnTeardown) { + FLog.e(TAG, "stop all attached surfaces"); + for (int surfaceId : mReactContextForRootTag.keySet()) { + FLog.e(TAG, "stop attached surface: " + surfaceId); + stopSurface(surfaceId); + } + } + mBinding.unregister(); mBinding = null;