Merge "Plug leaks in transitions" into klp-dev

This commit is contained in:
Chet Haase
2013-09-16 18:05:42 +00:00
committed by Android (Google) Code Review
4 changed files with 23 additions and 15 deletions

View File

@@ -1451,6 +1451,8 @@ public abstract class Transition implements Cloneable {
try {
clone = (Transition) super.clone();
clone.mAnimators = new ArrayList<Animator>();
clone.mStartValues = new TransitionValuesMaps();
clone.mEndValues = new TransitionValuesMaps();
} catch (CloneNotSupportedException e) {}
return clone;

View File

@@ -22,6 +22,7 @@ import android.util.Log;
import android.view.ViewGroup;
import android.view.ViewTreeObserver;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
/**
@@ -68,8 +69,9 @@ public class TransitionManager {
ArrayMap<Scene, Transition> mSceneTransitions = new ArrayMap<Scene, Transition>();
ArrayMap<Scene, ArrayMap<Scene, Transition>> mScenePairTransitions =
new ArrayMap<Scene, ArrayMap<Scene, Transition>>();
private static ThreadLocal<ArrayMap<ViewGroup, ArrayList<Transition>>> sRunningTransitions =
new ThreadLocal<ArrayMap<ViewGroup, ArrayList<Transition>>>();
private static ThreadLocal<WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>>
sRunningTransitions =
new ThreadLocal<WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>>();
private static ArrayList<ViewGroup> sPendingTransitions = new ArrayList<ViewGroup>();
@@ -184,20 +186,24 @@ public class TransitionManager {
}
private static ArrayMap<ViewGroup, ArrayList<Transition>> getRunningTransitions() {
ArrayMap<ViewGroup, ArrayList<Transition>> runningTransitions =
WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>> runningTransitions =
sRunningTransitions.get();
if (runningTransitions == null) {
runningTransitions = new ArrayMap<ViewGroup, ArrayList<Transition>>();
if (runningTransitions == null || runningTransitions.get() == null) {
ArrayMap<ViewGroup, ArrayList<Transition>> transitions =
new ArrayMap<ViewGroup, ArrayList<Transition>>();
runningTransitions = new WeakReference<ArrayMap<ViewGroup, ArrayList<Transition>>>(
transitions);
sRunningTransitions.set(runningTransitions);
}
return runningTransitions;
return runningTransitions.get();
}
private static void sceneChangeRunTransition(final ViewGroup sceneRoot,
final Transition transition) {
if (transition != null) {
final ViewTreeObserver observer = sceneRoot.getViewTreeObserver();
observer.addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() {
final ViewTreeObserver.OnPreDrawListener listener =
new ViewTreeObserver.OnPreDrawListener() {
public boolean onPreDraw() {
sceneRoot.getViewTreeObserver().removeOnPreDrawListener(this);
sPendingTransitions.remove(sceneRoot);
@@ -236,7 +242,8 @@ public class TransitionManager {
// values set on them again and avoid artifacts.
return false;
}
});
};
observer.addOnPreDrawListener(listener);
}
}
@@ -355,10 +362,10 @@ public class TransitionManager {
// if (transition == null) {
// transition = sDefaultTransition;
// }
// final Transition finalTransition = transition.clone();
// sceneChangeSetup(sceneRoot, transition);
// final Transition transitionClone = transition.clone();
// sceneChangeSetup(sceneRoot, transitionClone);
// Scene.setCurrentScene(sceneRoot, null);
// sceneChangeRunTransition(sceneRoot, finalTransition);
// sceneChangeRunTransition(sceneRoot, transitionClone);
// }
}
}

View File

@@ -65,9 +65,6 @@ public abstract class Visibility extends Transition {
ViewGroup endParent;
}
// Temporary structure, used in calculating state in setup() and play()
private VisibilityInfo mTmpVisibilityInfo = new VisibilityInfo();
@Override
public String[] getTransitionProperties() {
return sTransitionProperties;
@@ -161,7 +158,7 @@ public abstract class Visibility extends Transition {
private VisibilityInfo getVisibilityChangeInfo(TransitionValues startValues,
TransitionValues endValues) {
final VisibilityInfo visInfo = mTmpVisibilityInfo;
final VisibilityInfo visInfo = new VisibilityInfo();
visInfo.visibilityChange = false;
visInfo.fadeIn = false;
if (startValues != null) {

View File

@@ -992,6 +992,8 @@ public final class ViewTreeObserver {
mData = mDataCopy;
}
mDataCopy = null;
mAccess.mData.clear();
mAccess.mSize = 0;
}
int size() {