diff --git a/ReactAndroid/src/main/java/com/facebook/react/cxxbridge/UnpackingJSBundleLoader.java b/ReactAndroid/src/main/java/com/facebook/react/cxxbridge/UnpackingJSBundleLoader.java index a70f82ada..dd593d010 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/cxxbridge/UnpackingJSBundleLoader.java +++ b/ReactAndroid/src/main/java/com/facebook/react/cxxbridge/UnpackingJSBundleLoader.java @@ -72,6 +72,11 @@ public class UnpackingJSBundleLoader extends JSBundleLoader { private final boolean mFinishOnBackgroundThread; private final @Nullable Runnable mOnUnpackedCallback; + /** + * True if prepare was called. + */ + private boolean mPrepared; + /** * Synchronizes unpacking within this process. */ @@ -96,13 +101,20 @@ public class UnpackingJSBundleLoader extends JSBundleLoader { mFinishOnBackgroundThread = builder.finishOnBackgroundThread; mOnUnpackedCallback = builder.callback; mFileLocker = null; + mPrepared = false; } /** * Checks if any file needs to be extracted again, and if so, clears the destination * directory and unpacks everything again. + * + * This method does not do anything if called for the second time */ - /* package */ void prepare() { + public synchronized void prepare() { + if (mPrepared) { + return; + } + ReactMarker.logMarker(ReactMarkerConstants.UNPACKER_CHECK_START); boolean unpacked = false; @@ -131,6 +143,8 @@ public class UnpackingJSBundleLoader extends JSBundleLoader { } ReactMarker.logMarker(ReactMarkerConstants.UNPACKER_CHECK_END); + + mPrepared = true; } private boolean prepareLocked() throws IOException {