在Android中的ViewHolder模式中使用SoftReference

时间:2014-06-11 06:06:51

标签: android tags android-viewholder

我是这个SoftReference和WeakReference的新手。我正在创建一个通用的ViewHolder模式,它将Hashtable中的所有视图保存为View的ID。我决定使用SoftReference for Hashtable和SoftReference来获取Hashtable中的item值。这是我的 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;
    }
}

我想知道以下内容

  1. 是否正确使用SoftReference?

  2. 如果我的活动被破坏而我无法做到会发生什么 调用destroy()的{​​{1}}方法。记忆会得到吗? 清理Hashtable?

  3. 每次都可以使用Hashtable中的所有项目 除非删除所有对ListItemTagHolder的引用?

0 个答案:

没有答案