From e6c8ace57623a2dcecc5c81a8c24f0b603968f97 Mon Sep 17 00:00:00 2001 From: Ramanpreet Nara Date: Thu, 1 Aug 2019 16:31:48 -0700 Subject: [PATCH] Perform cleanup when ReactApplicationContext is destroyed Summary: ## Description When we reload the app, `ReactApplicationContext.destroy()` is called. This method calls `CatalystInstanceImpl.destroy()`, which (on the NativeModules thread) calls `NativeModuleRegistry.notifyJSInstanceDestroy()`, which loops over all its `ModuleHolder`s, and calls `ModuleHolder.destroy()`, each of which call their NativeModule's `onCatalystInstanceDestroy()` method. TurboModuleManager is a `JSIModule`, so it also has its `onCatalystInstanceDestroy()` method called when the `ReactApplicationContext` is destroyed. But `TurboModuleManager.onCatalystInstanceDestroy()` doesn't do anything. Instead, at the very least, it should call `onCatalystInstanceDestroy()` of all NativeModules. Reviewed By: mdvacca Differential Revision: D16552730 fbshipit-source-id: 04459185262e92d69570facb368578a848cc5fdb --- .../react/turbomodule/core/TurboModuleManager.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java index 455050736c9..c81132e7ec7 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/turbomodule/core/TurboModuleManager.java @@ -91,5 +91,15 @@ public class TurboModuleManager implements JSIModule, TurboModuleRegistry { public void initialize() {} @Override - public void onCatalystInstanceDestroy() {} + public void onCatalystInstanceDestroy() { + for (TurboModule turboModule : mTurboModules.values()) { + // TODO(T48014458): Rename this to invalidate() + ((NativeModule) turboModule).onCatalystInstanceDestroy(); + } + + mTurboModules.clear(); + + // Delete the native part of this hybrid class. + mHybridData.resetNative(); + } }