// Copyright 2004-present Facebook. All Rights Reserved. package com.facebook.react.bridge; import android.os.AsyncTask; /** * Abstract base for a AsyncTask with result support that should have any RuntimeExceptions it * throws handled by the {@link com.facebook.react.bridge.NativeModuleCallExceptionHandler} * registered if the app is in dev mode. */ public abstract class GuardedResultAsyncTask<Result> extends AsyncTask<Void, Void, Result> { private final ReactContext mReactContext; protected GuardedResultAsyncTask(ReactContext reactContext) { mReactContext = reactContext; } @Override protected final Result doInBackground(Void... params) { try { return doInBackgroundGuarded(); } catch (RuntimeException e) { mReactContext.handleException(e); throw e; } } @Override protected final void onPostExecute(Result result) { try { onPostExecuteGuarded(result); } catch (RuntimeException e) { mReactContext.handleException(e); } } protected abstract Result doInBackgroundGuarded(); protected abstract void onPostExecuteGuarded(Result result); }