diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/jsi/TurboModuleManager.java b/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/jsi/TurboModuleManager.java index 02c1435a761..acb4c3cc7cd 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/jsi/TurboModuleManager.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/bridge/jsi/TurboModuleManager.java @@ -16,11 +16,13 @@ package com.tencent.mtt.hippy.bridge.jsi; import com.tencent.mtt.hippy.HippyEngineContext; +import com.tencent.mtt.hippy.common.ThreadExecutor.UncaughtExceptionHandler; import com.tencent.mtt.hippy.modules.HippyModuleManagerImpl; import com.tencent.mtt.hippy.modules.nativemodules.HippyNativeModuleBase; import com.tencent.mtt.hippy.modules.nativemodules.HippyNativeModuleInfo; import com.tencent.mtt.hippy.utils.LogUtils; +import java.lang.ref.WeakReference; import java.util.HashMap; import java.util.Map; @@ -28,10 +30,10 @@ public class TurboModuleManager { public static final String TAG = "TurboModuleManager"; private final Map mModuleMap = new HashMap<>(); - private final HippyEngineContext mHippyEngineContext; + private final WeakReference mHippyEngineContextRef; public TurboModuleManager(HippyEngineContext context) { - mHippyEngineContext = context; + mHippyEngineContextRef = new WeakReference<>(context); } public HippyNativeModuleBase get(String name) { @@ -40,8 +42,11 @@ public HippyNativeModuleBase get(String name) { if (module != null) { return module; } - - HippyModuleManagerImpl hippyModuleManager = (HippyModuleManagerImpl) mHippyEngineContext.getModuleManager(); + HippyEngineContext engineContext = mHippyEngineContextRef.get(); + if (engineContext == null) { + return null; + } + HippyModuleManagerImpl hippyModuleManager = (HippyModuleManagerImpl) engineContext.getModuleManager(); HippyNativeModuleInfo moduleInfo = hippyModuleManager.getNativeModuleInfo().get(name); if (moduleInfo == null) { return null; diff --git a/framework/android/src/main/java/com/tencent/mtt/hippy/common/ThreadExecutor.java b/framework/android/src/main/java/com/tencent/mtt/hippy/common/ThreadExecutor.java index e8df08b1786..e6d9581d041 100644 --- a/framework/android/src/main/java/com/tencent/mtt/hippy/common/ThreadExecutor.java +++ b/framework/android/src/main/java/com/tencent/mtt/hippy/common/ThreadExecutor.java @@ -17,13 +17,14 @@ package com.tencent.mtt.hippy.common; import androidx.annotation.Nullable; +import java.lang.ref.WeakReference; public class ThreadExecutor implements Thread.UncaughtExceptionHandler { private final HippyHandlerThread mBridgeThread; private final HippyHandlerThread mModuleThread; @Nullable - private UncaughtExceptionHandler mUncaughtExceptionHandler; + private WeakReference mUncaughtExceptionHandlerRef; private final int mGroupId; public ThreadExecutor(int groupId) { @@ -35,7 +36,7 @@ public ThreadExecutor(int groupId) { } public void setUncaughtExceptionHandler(UncaughtExceptionHandler exceptionHandler) { - mUncaughtExceptionHandler = exceptionHandler; + mUncaughtExceptionHandlerRef = new WeakReference<>(exceptionHandler); } public void destroy() { @@ -47,7 +48,6 @@ public void destroy() { mBridgeThread.quit(); mBridgeThread.setUncaughtExceptionHandler(null); } - mUncaughtExceptionHandler = null; } public HippyHandlerThread getModuleThread() { @@ -60,8 +60,11 @@ public HippyHandlerThread getBridgeThread() { @Override public void uncaughtException(Thread t, Throwable e) { - if (mUncaughtExceptionHandler != null) { - mUncaughtExceptionHandler.handleThreadUncaughtException(t, e, mGroupId); + if (mUncaughtExceptionHandlerRef != null) { + UncaughtExceptionHandler handler = mUncaughtExceptionHandlerRef.get(); + if (handler != null) { + handler.handleThreadUncaughtException(t, e, mGroupId); + } } else { throw new RuntimeException(e); }