Merge "Fix issue #5367164: memory leak in LayoutTransition"

This commit is contained in:
Chet Haase
2011-10-06 14:35:53 -07:00
committed by Android (Google) Code Review
2 changed files with 11 additions and 5 deletions

View File

@@ -24,6 +24,7 @@ import android.view.animation.AccelerateDecelerateInterpolator;
import android.view.animation.DecelerateInterpolator; import android.view.animation.DecelerateInterpolator;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap; import java.util.HashMap;
import java.util.LinkedHashMap; import java.util.LinkedHashMap;
import java.util.List; import java.util.List;
@@ -615,10 +616,13 @@ public class LayoutTransition {
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() { public boolean onPreDraw() {
parent.getViewTreeObserver().removeOnPreDrawListener(this); parent.getViewTreeObserver().removeOnPreDrawListener(this);
int numChildren = parent.getChildCount(); int count = layoutChangeListenerMap.size();
for (int i = 0; i < numChildren; ++i) { if (count > 0) {
final View child = parent.getChildAt(i); Collection<View> views = layoutChangeListenerMap.keySet();
child.removeOnLayoutChangeListener(layoutChangeListenerMap.get(child)); for (View view : views) {
View.OnLayoutChangeListener listener = layoutChangeListenerMap.get(view);
view.removeOnLayoutChangeListener(listener);
}
} }
layoutChangeListenerMap.clear(); layoutChangeListenerMap.clear();
return true; return true;

View File

@@ -3335,7 +3335,9 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
if (mOnLayoutChangeListeners == null) { if (mOnLayoutChangeListeners == null) {
mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>(); mOnLayoutChangeListeners = new ArrayList<OnLayoutChangeListener>();
} }
mOnLayoutChangeListeners.add(listener); if (!mOnLayoutChangeListeners.contains(listener)) {
mOnLayoutChangeListeners.add(listener);
}
} }
/** /**