diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/GuardedAsyncTask.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/GuardedAsyncTask.java index eee4aeccd3b..a8bbcab4e7e 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/GuardedAsyncTask.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/GuardedAsyncTask.java @@ -18,10 +18,15 @@ import android.os.AsyncTask; */ public abstract class GuardedAsyncTask extends AsyncTask { - private final ReactContext mReactContext; + private final NativeModuleCallExceptionHandler mExceptionHandler; + @Deprecated protected GuardedAsyncTask(ReactContext reactContext) { - mReactContext = reactContext; + this(reactContext.getExceptionHandler()); + } + + protected GuardedAsyncTask(NativeModuleCallExceptionHandler exceptionHandler) { + mExceptionHandler = exceptionHandler; } @Override @@ -29,7 +34,7 @@ public abstract class GuardedAsyncTask extends AsyncTask extends AsyncTask { - private final ReactContext mReactContext; + private final NativeModuleCallExceptionHandler mExceptionHandler; + @Deprecated protected GuardedResultAsyncTask(ReactContext reactContext) { - mReactContext = reactContext; + this(reactContext.getExceptionHandler()); + } + + protected GuardedResultAsyncTask(NativeModuleCallExceptionHandler exceptionHandler) { + mExceptionHandler = exceptionHandler; } @Override @@ -25,7 +30,7 @@ public abstract class GuardedResultAsyncTask extends AsyncTask extends AsyncTask mCurrentActivity; public ReactContext(Context base) { @@ -344,6 +345,20 @@ public class ReactContext extends ContextWrapper { } } + public class ExceptionHandlerWrapper implements NativeModuleCallExceptionHandler { + @Override + public void handleException(Exception e) { + ReactContext.this.handleException(e); + } + } + + public NativeModuleCallExceptionHandler getExceptionHandler() { + if (mExceptionHandlerWrapper == null) { + mExceptionHandlerWrapper = new ExceptionHandlerWrapper(); + } + return mExceptionHandlerWrapper; + } + public boolean hasCurrentActivity() { return mCurrentActivity != null && mCurrentActivity.get() != null; } diff --git a/ReactAndroid/src/main/java/com/facebook/react/fabric/GuardedFrameCallback.java b/ReactAndroid/src/main/java/com/facebook/react/fabric/GuardedFrameCallback.java index 2982bd472e9..d1cbf4c5fdc 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/fabric/GuardedFrameCallback.java +++ b/ReactAndroid/src/main/java/com/facebook/react/fabric/GuardedFrameCallback.java @@ -6,15 +6,21 @@ */ package com.facebook.react.fabric; +import com.facebook.react.bridge.NativeModuleCallExceptionHandler; import com.facebook.react.bridge.ReactContext; import com.facebook.react.modules.core.ChoreographerCompat; public abstract class GuardedFrameCallback extends ChoreographerCompat.FrameCallback { - private final ReactContext mReactContext; + private final NativeModuleCallExceptionHandler mExceptionHandler; + @Deprecated protected GuardedFrameCallback(ReactContext reactContext) { - mReactContext = reactContext; + this(reactContext.getExceptionHandler()); + } + + protected GuardedFrameCallback(NativeModuleCallExceptionHandler exceptionHandler) { + mExceptionHandler = exceptionHandler; } @Override @@ -22,7 +28,7 @@ public abstract class GuardedFrameCallback extends ChoreographerCompat.FrameCall try { doFrameGuarded(frameTimeNanos); } catch (RuntimeException e) { - mReactContext.handleException(e); + mExceptionHandler.handleException(e); } }