diff options
author | Chet Haase <chet@google.com> | 2013-10-30 06:37:29 -0700 |
---|---|---|
committer | Chet Haase <chet@google.com> | 2013-10-31 14:25:56 -0700 |
commit | 58ad12208afcf9fdce735dead8449c4db375344d (patch) | |
tree | 64d6bfb5e89e50f2d24420e9243ef0dd66bc8a64 /core/java/android/transition | |
parent | ca8547b435d53aef94646d2e6bc31b09a34a086f (diff) | |
download | frameworks_base-58ad12208afcf9fdce735dead8449c4db375344d.zip frameworks_base-58ad12208afcf9fdce735dead8449c4db375344d.tar.gz frameworks_base-58ad12208afcf9fdce735dead8449c4db375344d.tar.bz2 |
Fix leak in TransitionInflater
A static map in TransitionInflater keyed off of Context instances,
which could cause contexts/activities to leak over time. This
fix removes that map and simply creates a new inflater each time.
The savings of the cached inflater was minimal an unnecessary, and the
intended sharing is in the context embedded in the inflater anyway.
Issue #11436919 leak in TransitionInflator
Change-Id: Ic05ca47f57723bd572bb6143df4035d66eedf5ad
Diffstat (limited to 'core/java/android/transition')
-rw-r--r-- | core/java/android/transition/Transition.java | 3 | ||||
-rw-r--r-- | core/java/android/transition/TransitionInflater.java | 18 |
2 files changed, 3 insertions, 18 deletions
diff --git a/core/java/android/transition/Transition.java b/core/java/android/transition/Transition.java index f76e190..da9ba5a 100644 --- a/core/java/android/transition/Transition.java +++ b/core/java/android/transition/Transition.java @@ -1255,7 +1255,8 @@ public abstract class Transition implements Cloneable { Animator anim = runningAnimators.keyAt(i); if (anim != null) { AnimationInfo oldInfo = runningAnimators.get(anim); - if (oldInfo != null) { + if (oldInfo != null && oldInfo.view != null && + oldInfo.view.getContext() == sceneRoot.getContext()) { boolean cancel = false; TransitionValues oldValues = oldInfo.values; View oldView = oldInfo.view; diff --git a/core/java/android/transition/TransitionInflater.java b/core/java/android/transition/TransitionInflater.java index 4af0f51..9f77d5e 100644 --- a/core/java/android/transition/TransitionInflater.java +++ b/core/java/android/transition/TransitionInflater.java @@ -20,9 +20,7 @@ import android.content.Context; import android.content.res.Resources; import android.content.res.TypedArray; import android.content.res.XmlResourceParser; -import android.util.ArrayMap; import android.util.AttributeSet; -import android.util.SparseArray; import android.util.Xml; import android.view.InflateException; import android.view.ViewGroup; @@ -43,15 +41,7 @@ import java.util.ArrayList; */ public class TransitionInflater { - // We only need one inflater for any given context. Also, this allows us to associate - // ids with unique instances per-Context, used to avoid re-inflating - // already-inflated resources into new/different instances - private static final ArrayMap<Context, TransitionInflater> sInflaterMap = - new ArrayMap<Context, TransitionInflater>(); - private Context mContext; - // TODO: do we need id maps for transitions and transitionMgrs as well? - SparseArray<Scene> mScenes = new SparseArray<Scene>(); private TransitionInflater(Context context) { mContext = context; @@ -61,13 +51,7 @@ public class TransitionInflater { * Obtains the TransitionInflater from the given context. */ public static TransitionInflater from(Context context) { - TransitionInflater inflater = sInflaterMap.get(context); - if (inflater != null) { - return inflater; - } - inflater = new TransitionInflater(context); - sInflaterMap.put(context, inflater); - return inflater; + return new TransitionInflater(context); } /** |