diff --git a/android/src/main/cpp/NativeProxy.cpp b/android/src/main/cpp/NativeProxy.cpp index 282b3ffdae1..efa64635a7e 100644 --- a/android/src/main/cpp/NativeProxy.cpp +++ b/android/src/main/cpp/NativeProxy.cpp @@ -37,6 +37,13 @@ NativeProxy::NativeProxy( scheduler_(scheduler), layoutAnimations(std::move(_layoutAnimations)) {} +NativeProxy::~NativeProxy() { + runtime_->global().setProperty( + *runtime_, + jsi::PropNameID::forAscii(*runtime_, "__reanimatedModuleProxy"), + jsi::Value::undefined()); +} + jni::local_ref NativeProxy::initHybrid( jni::alias_ref jThis, jlong jsContext, @@ -192,18 +199,21 @@ void NativeProxy::installJSIBindings() { platformDepMethodsHolder); _nativeReanimatedModule = module; - - this->registerEventHandler([module, getCurrentTime]( - std::string eventName, - std::string eventAsString) { - jsi::Object global = module->runtime->global(); - jsi::String eventTimestampName = - jsi::String::createFromAscii(*module->runtime, "_eventTimestamp"); - global.setProperty(*module->runtime, eventTimestampName, getCurrentTime()); - module->onEvent(eventName, eventAsString); - global.setProperty( - *module->runtime, eventTimestampName, jsi::Value::undefined()); - }); + std::weak_ptr weakModule = module; + this->registerEventHandler( + [weakModule, getCurrentTime]( + std::string eventName, std::string eventAsString) { + if (auto module = weakModule.lock()) { + jsi::Object global = module->runtime->global(); + jsi::String eventTimestampName = + jsi::String::createFromAscii(*module->runtime, "_eventTimestamp"); + global.setProperty( + *module->runtime, eventTimestampName, getCurrentTime()); + module->onEvent(eventName, eventAsString); + global.setProperty( + *module->runtime, eventTimestampName, jsi::Value::undefined()); + } + }); runtime_->global().setProperty( *runtime_, diff --git a/android/src/main/cpp/headers/NativeProxy.h b/android/src/main/cpp/headers/NativeProxy.h index c4acab53621..4266de10d97 100644 --- a/android/src/main/cpp/headers/NativeProxy.h +++ b/android/src/main/cpp/headers/NativeProxy.h @@ -131,6 +131,8 @@ class NativeProxy : public jni::HybridClass { jni::alias_ref layoutAnimations); static void registerNatives(); + ~NativeProxy(); + private: friend HybridBase; jni::global_ref javaPart_;