Merge "Fix leaky view tags"
This commit is contained in:
@@ -81,7 +81,6 @@ import java.lang.reflect.Method;
|
|||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.WeakHashMap;
|
|
||||||
import java.util.concurrent.CopyOnWriteArrayList;
|
import java.util.concurrent.CopyOnWriteArrayList;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1497,12 +1496,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
|
|||||||
/**
|
/**
|
||||||
* Map used to store views' tags.
|
* Map used to store views' tags.
|
||||||
*/
|
*/
|
||||||
private static WeakHashMap<View, SparseArray<Object>> sTags;
|
private SparseArray<Object> mKeyedTags;
|
||||||
|
|
||||||
/**
|
|
||||||
* Lock used to access sTags.
|
|
||||||
*/
|
|
||||||
private static final Object sTagsLock = new Object();
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The next available accessiiblity id.
|
* The next available accessiiblity id.
|
||||||
@@ -12236,14 +12230,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
|
|||||||
* @see #getTag()
|
* @see #getTag()
|
||||||
*/
|
*/
|
||||||
public Object getTag(int key) {
|
public Object getTag(int key) {
|
||||||
SparseArray<Object> tags = null;
|
if (mKeyedTags != null) return mKeyedTags.get(key);
|
||||||
synchronized (sTagsLock) {
|
|
||||||
if (sTags != null) {
|
|
||||||
tags = sTags.get(this);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tags != null) return tags.get(key);
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -12276,7 +12263,7 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
|
|||||||
+ "resource id.");
|
+ "resource id.");
|
||||||
}
|
}
|
||||||
|
|
||||||
setTagInternal(this, key, tag);
|
setKeyedTag(this, key, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -12291,27 +12278,15 @@ public class View implements Drawable.Callback, Drawable.Callback2, KeyEvent.Cal
|
|||||||
+ "resource id.");
|
+ "resource id.");
|
||||||
}
|
}
|
||||||
|
|
||||||
setTagInternal(this, key, tag);
|
setKeyedTag(this, key, tag);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void setTagInternal(View view, int key, Object tag) {
|
private void setKeyedTag(View view, int key, Object tag) {
|
||||||
SparseArray<Object> tags = null;
|
if (mKeyedTags == null) {
|
||||||
synchronized (sTagsLock) {
|
mKeyedTags = new SparseArray<Object>();
|
||||||
if (sTags == null) {
|
|
||||||
sTags = new WeakHashMap<View, SparseArray<Object>>();
|
|
||||||
} else {
|
|
||||||
tags = sTags.get(view);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (tags == null) {
|
mKeyedTags.put(key, tag);
|
||||||
tags = new SparseArray<Object>(2);
|
|
||||||
synchronized (sTagsLock) {
|
|
||||||
sTags.put(view, tags);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
tags.put(key, tag);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
Reference in New Issue
Block a user