From 07a5f4407fd0d2a58b1d5b5508eb6911380daa51 Mon Sep 17 00:00:00 2001 From: Felix Oghina Date: Tue, 16 Feb 2016 12:13:16 -0800 Subject: [PATCH] add removeReactInstanceEventListener and call it from onDestroy Reviewed By: zahanm Differential Revision: D2937547 fb-gh-sync-id: 95461fdada8ac86d2c4174dae7023c97a3101e2e shipit-source-id: 95461fdada8ac86d2c4174dae7023c97a3101e2e --- .../java/com/facebook/react/ReactInstanceManager.java | 5 +++++ .../com/facebook/react/ReactInstanceManagerImpl.java | 10 +++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java index 17fb538b8..1bcd68cc2 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManager.java @@ -136,6 +136,11 @@ public abstract class ReactInstanceManager { */ public abstract void addReactInstanceEventListener(ReactInstanceEventListener listener); + /** + * Remove a listener previously added with {@link #addReactInstanceEventListener}. + */ + public abstract void removeReactInstanceEventListener(ReactInstanceEventListener listener); + @VisibleForTesting public abstract @Nullable ReactContext getCurrentReactContext(); diff --git a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java index c4f550495..88a064c6c 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java +++ b/ReactAndroid/src/main/java/com/facebook/react/ReactInstanceManagerImpl.java @@ -15,7 +15,10 @@ import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; +import java.util.Collections; +import java.util.HashSet; import java.util.List; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentLinkedQueue; import android.app.Activity; @@ -110,7 +113,7 @@ import static com.facebook.react.bridge.ReactMarkerConstants.*; private String mSourceUrl; private @Nullable Activity mCurrentActivity; private final Collection mReactInstanceEventListeners = - new ConcurrentLinkedQueue<>(); + Collections.synchronizedSet(new HashSet()); private volatile boolean mHasStartedCreatingInitialContext = false; private final UIImplementationProvider mUIImplementationProvider; private final MemoryPressureRouter mMemoryPressureRouter; @@ -599,6 +602,11 @@ import static com.facebook.react.bridge.ReactMarkerConstants.*; mReactInstanceEventListeners.add(listener); } + @Override + public void removeReactInstanceEventListener(ReactInstanceEventListener listener) { + mReactInstanceEventListeners.remove(listener); + } + @VisibleForTesting @Override public @Nullable ReactContext getCurrentReactContext() {