OSDN Git Service

Fix memory leak in setActionProvider() - framework edition
authorChris Banes <chrisbanes@google.com>
Tue, 30 Jun 2015 10:16:37 +0000 (11:16 +0100)
committerChris Banes <chrisbanes@google.com>
Tue, 30 Jun 2015 10:17:57 +0000 (11:17 +0100)
Caused by ActionMenuItem's SubUiVisibilityListener
not being nulled when it is replaced via setActionProvider().

BUG: 22189734
Change-Id: Id4deaa05cd5554ca7bdf969a592e4812e39dcb75

core/java/android/view/ActionProvider.java
core/java/com/android/internal/view/menu/MenuItemImpl.java

index c3aafde..752240f 100644 (file)
@@ -237,6 +237,14 @@ public abstract class ActionProvider {
     }
 
     /**
+     * @hide
+     */
+    public void reset() {
+        mVisibilityListener = null;
+        mSubUiVisibilityListener = null;
+    }
+
+    /**
      * @hide Internal use only
      */
     public interface SubUiVisibilityListener {
index 3b1f20d..08d4e86 100644 (file)
@@ -593,7 +593,7 @@ public final class MenuItemImpl implements MenuItem {
 
     public MenuItem setActionProvider(ActionProvider actionProvider) {
         if (mActionProvider != null) {
-            mActionProvider.setVisibilityListener(null);
+            mActionProvider.reset();
         }
         mActionView = null;
         mActionProvider = actionProvider;