diff options
| author | 2011-10-06 14:35:53 -0700 | |
|---|---|---|
| committer | 2011-10-06 14:35:53 -0700 | |
| commit | e9121bc10ae83f45bf4fa4721e4384e6cf0701a6 (patch) | |
| tree | a6384308ad48cd0fe3cbdf5e2618e6c2a31266be | |
| parent | bece9cb7944daa012ca95fc7f6c73f6fad035892 (diff) | |
| parent | 1a76dcd6d1e30f92668b5df309398d545cef9ace (diff) | |
Merge "Fix issue #5367164: memory leak in LayoutTransition"
| -rw-r--r-- | core/java/android/animation/LayoutTransition.java | 12 | ||||
| -rw-r--r-- | core/java/android/view/View.java | 4 |
2 files changed, 11 insertions, 5 deletions
diff --git a/core/java/android/animation/LayoutTransition.java b/core/java/android/animation/LayoutTransition.java index 355b1fcc68de..f383af93851e 100644 --- a/core/java/android/animation/LayoutTransition.java +++ b/core/java/android/animation/LayoutTransition.java @@ -24,6 +24,7 @@ import android.view.animation.AccelerateDecelerateInterpolator; import android.view.animation.DecelerateInterpolator; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; @@ -615,10 +616,13 @@ public class LayoutTransition { observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { public boolean onPreDraw() { parent.getViewTreeObserver().removeOnPreDrawListener(this); - int numChildren = parent.getChildCount(); - for (int i = 0; i < numChildren; ++i) { - final View child = parent.getChildAt(i); - child.removeOnLayoutChangeListener(layoutChangeListenerMap.get(child)); + int count = layoutChangeListenerMap.size(); + if (count > 0) { + Collection<View> views = layoutChangeListenerMap.keySet(); + for (View view : views) { + View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view); + view.removeOnLayoutChangeListener(listener); + } } layoutChangeListenerMap.clear(); return true; diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java index 8e5aefdff0e8..632ab4acb25e 100644 --- a/core/java/android/view/View.java +++ b/core/java/android/view/View.java @@ -3335,7 +3335,9 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal if (mOnLayoutChangeListeners == null) { mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>(); } - mOnLayoutChangeListeners.add(listener); + if (!mOnLayoutChangeListeners.contains(listener)) { + mOnLayoutChangeListeners.add(listener); + } } /** |