summaryrefslogtreecommitdiffstats
path: root/core/java/android/transition
diff options
context:
space:
mode:
authorChet Haase <chet@google.com>2013-10-30 06:37:29 -0700
committerChet Haase <chet@google.com>2013-10-31 14:25:56 -0700
commit58ad12208afcf9fdce735dead8449c4db375344d (patch)
tree64d6bfb5e89e50f2d24420e9243ef0dd66bc8a64 /core/java/android/transition
parentca8547b435d53aef94646d2e6bc31b09a34a086f (diff)
downloadframeworks_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.java3
-rw-r--r--core/java/android/transition/TransitionInflater.java18
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);
}
/**