From b006f79bf5c48b5b38eeacdddadd3b8a86d54a99 Mon Sep 17 00:00:00 2001 From: Aaron Chiu Date: Mon, 14 Mar 2016 07:50:55 -0700 Subject: [PATCH] make Activity reference in ReactContext WeakReference Reviewed By: andreicoman11 Differential Revision: D3040724 fb-gh-sync-id: fef5a84907d22d07ae1df82f5d1071c8fae45420 shipit-source-id: fef5a84907d22d07ae1df82f5d1071c8fae45420 --- .../facebook/react/bridge/ReactContext.java | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java index db25b0d731b..05d3123605f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java +++ b/ReactAndroid/src/main/java/com/facebook/react/bridge/ReactContext.java @@ -11,6 +11,7 @@ package com.facebook.react.bridge; import javax.annotation.Nullable; +import java.lang.ref.WeakReference; import java.util.concurrent.CopyOnWriteArraySet; import android.app.Activity; @@ -21,8 +22,8 @@ import android.os.Bundle; import android.view.LayoutInflater; import com.facebook.infer.annotation.Assertions; -import com.facebook.react.bridge.queue.ReactQueueConfiguration; import com.facebook.react.bridge.queue.MessageQueueThread; +import com.facebook.react.bridge.queue.ReactQueueConfiguration; /** * Abstract ContextWrapper for Android applicaiton or activity {@link Context} and @@ -41,7 +42,7 @@ public class ReactContext extends ContextWrapper { private @Nullable MessageQueueThread mNativeModulesMessageQueueThread; private @Nullable MessageQueueThread mJSMessageQueueThread; private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler; - private @Nullable Activity mCurrentActivity; + private @Nullable WeakReference mCurrentActivity; public ReactContext(Context base) { super(base); @@ -142,7 +143,7 @@ public class ReactContext extends ContextWrapper { */ public void onHostResume(@Nullable Activity activity) { UiThreadUtil.assertOnUiThread(); - mCurrentActivity = activity; + mCurrentActivity = new WeakReference(activity); for (LifecycleEventListener listener : mLifecycleEventListeners) { listener.onHostResume(); } @@ -241,7 +242,7 @@ public class ReactContext extends ContextWrapper { } public boolean hasCurrentActivity() { - return mCurrentActivity != null; + return mCurrentActivity != null && mCurrentActivity.get() != null; } /** @@ -250,8 +251,9 @@ public class ReactContext extends ContextWrapper { * was called before the context is in the right state. */ public boolean startActivityForResult(Intent intent, int code, Bundle bundle) { - Assertions.assertNotNull(mCurrentActivity); - mCurrentActivity.startActivityForResult(intent, code, bundle); + Activity activity = getCurrentActivity(); + Assertions.assertNotNull(activity); + activity.startActivityForResult(intent, code, bundle); return true; } @@ -261,6 +263,9 @@ public class ReactContext extends ContextWrapper { * MEMORY LEAKS. */ /* package */ @Nullable Activity getCurrentActivity() { - return mCurrentActivity; + if (mCurrentActivity == null) { + return null; + } + return mCurrentActivity.get(); } }