make Activity reference in ReactContext WeakReference
Reviewed By: andreicoman11 Differential Revision: D3040724 fb-gh-sync-id: fef5a84907d22d07ae1df82f5d1071c8fae45420 shipit-source-id: fef5a84907d22d07ae1df82f5d1071c8fae45420
This commit is contained in:
parent
688bb17777
commit
b006f79bf5
|
@ -11,6 +11,7 @@ package com.facebook.react.bridge;
|
||||||
|
|
||||||
import javax.annotation.Nullable;
|
import javax.annotation.Nullable;
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
import java.util.concurrent.CopyOnWriteArraySet;
|
import java.util.concurrent.CopyOnWriteArraySet;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
|
@ -21,8 +22,8 @@ import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.LayoutInflater;
|
||||||
|
|
||||||
import com.facebook.infer.annotation.Assertions;
|
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.MessageQueueThread;
|
||||||
|
import com.facebook.react.bridge.queue.ReactQueueConfiguration;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Abstract ContextWrapper for Android applicaiton or activity {@link Context} and
|
* 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 mNativeModulesMessageQueueThread;
|
||||||
private @Nullable MessageQueueThread mJSMessageQueueThread;
|
private @Nullable MessageQueueThread mJSMessageQueueThread;
|
||||||
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
|
private @Nullable NativeModuleCallExceptionHandler mNativeModuleCallExceptionHandler;
|
||||||
private @Nullable Activity mCurrentActivity;
|
private @Nullable WeakReference<Activity> mCurrentActivity;
|
||||||
|
|
||||||
public ReactContext(Context base) {
|
public ReactContext(Context base) {
|
||||||
super(base);
|
super(base);
|
||||||
|
@ -142,7 +143,7 @@ public class ReactContext extends ContextWrapper {
|
||||||
*/
|
*/
|
||||||
public void onHostResume(@Nullable Activity activity) {
|
public void onHostResume(@Nullable Activity activity) {
|
||||||
UiThreadUtil.assertOnUiThread();
|
UiThreadUtil.assertOnUiThread();
|
||||||
mCurrentActivity = activity;
|
mCurrentActivity = new WeakReference(activity);
|
||||||
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
for (LifecycleEventListener listener : mLifecycleEventListeners) {
|
||||||
listener.onHostResume();
|
listener.onHostResume();
|
||||||
}
|
}
|
||||||
|
@ -241,7 +242,7 @@ public class ReactContext extends ContextWrapper {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hasCurrentActivity() {
|
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.
|
* was called before the context is in the right state.
|
||||||
*/
|
*/
|
||||||
public boolean startActivityForResult(Intent intent, int code, Bundle bundle) {
|
public boolean startActivityForResult(Intent intent, int code, Bundle bundle) {
|
||||||
Assertions.assertNotNull(mCurrentActivity);
|
Activity activity = getCurrentActivity();
|
||||||
mCurrentActivity.startActivityForResult(intent, code, bundle);
|
Assertions.assertNotNull(activity);
|
||||||
|
activity.startActivityForResult(intent, code, bundle);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -261,6 +263,9 @@ public class ReactContext extends ContextWrapper {
|
||||||
* MEMORY LEAKS.
|
* MEMORY LEAKS.
|
||||||
*/
|
*/
|
||||||
/* package */ @Nullable Activity getCurrentActivity() {
|
/* package */ @Nullable Activity getCurrentActivity() {
|
||||||
return mCurrentActivity;
|
if (mCurrentActivity == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return mCurrentActivity.get();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue