From e9ae31dfd6312b1d98eef34b4a8d366b7482bdb1 Mon Sep 17 00:00:00 2001 From: Adam Comella Date: Thu, 25 May 2017 02:50:14 -0700 Subject: [PATCH] Android: Fix memory leak in AccessibilityInfoModule Summary: This change fixes a memory leak in `AccessibilityInfoModule`. Our tooling detected this memory leak. After this commit, we no longer see the leak in the tool. We've been using the change in our app. Adam Comella Microsoft Corp. Closes https://github.com/facebook/react-native/pull/14171 Differential Revision: D5128845 Pulled By: javache fbshipit-source-id: b604902188eb8cc029b1ad39d087e199ae26877c --- .../accessibilityinfo/AccessibilityInfoModule.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java index 765c60716..257cb0d51 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/accessibilityinfo/AccessibilityInfoModule.java @@ -43,8 +43,8 @@ public class AccessibilityInfoModule extends ReactContextBaseJavaModule public AccessibilityInfoModule(ReactApplicationContext context) { super(context); - mAccessibilityManager = (AccessibilityManager) getReactApplicationContext() - .getSystemService(Context.ACCESSIBILITY_SERVICE); + Context appContext = context.getApplicationContext(); + mAccessibilityManager = (AccessibilityManager) appContext.getSystemService(Context.ACCESSIBILITY_SERVICE); mEnabled = mAccessibilityManager.isTouchExplorationEnabled(); if (Build.VERSION.SDK_INT >= 19) { mTouchExplorationStateChangeListener = new ReactTouchExplorationStateChangeListener(); @@ -92,6 +92,12 @@ public class AccessibilityInfoModule extends ReactContextBaseJavaModule updateAndSendChangeEvent(mAccessibilityManager.isTouchExplorationEnabled()); } + @Override + public void onCatalystInstanceDestroy() { + super.onCatalystInstanceDestroy(); + getReactApplicationContext().removeLifecycleEventListener(this); + } + @Override public void onHostDestroy() { }