我是这个 SoftReference 和 WeakReference 的新手。我正在制作一个通用ViewHolder
模式,它使所有视图Hashtable
都由 View 的 ID 键入。我决定将 SoftReference 用于 Hashtable,并将 SoftReference 用于 Hashtable 中的项目值。这是我的ViewHolder 类
public class ListItemTagHolder {
private int index;
private SoftReference<java.util.Hashtable<Integer,SoftReference<View>>> views=
new SoftReference<java.util.Hashtable<Integer,SoftReference<View>>>(
new java.util.Hashtable<Integer,SoftReference<View>>());
public ListItemTagHolder(int index){
this.index=index;
}
public void destroy(){
java.util.Hashtable<Integer,SoftReference<View>> vals=views.get();
Enumeration<Integer> ks=vals.keys();
while(ks.hasMoreElements()){
vals.get(ks.nextElement()).clear();
}
vals.clear();
views.get().clear();
views.clear();
ks=null;
vals=null;
}
public View getView(int id){
return views.get().get(id).get();
}
public void addView(View v){
views.get().put(v.getId(),new SoftReference<View>(v));
}
public int getIndex(){
return index;
}
public void setIndex(int index){
this.index=index;
}
}
我想知道以下
正确使用 SoftReference 吗?
如果我的活动被破坏并且我无法
destroy()
调用ListItemTagHolder
. 会为 Hashtable 清理内存吗?除非删除所有对 ListItemTagHolder 的引用,否则我每次都可以使用 Hashtable 中的所有项目吗?