来自https://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder
> A ViewHolder object stores each of the component views inside the
> tag field of the Layout, so you can immediately access them without
> the need to look them up repeatedly.
在android中更改orientatin后,将重新创建listview,以便列出所有listview项 迷路了。
示例:
/** ViewHolder attached to ListView-Item.tag */
public static class MyViewHolder {
/** the image belonging to ListView-Item */
ImageView mListViewItemImage;
}
我的问题:这会导致内存泄漏,因为存在循环引用:
如果这导致内存泄漏,我是否必须实现ViewHolder垃圾回收?
答案 0 :(得分:0)
此模式不使用静态变量,只有类是静态内部类。
在您提到的参考文献中,明确指出您应该像这样创建ViewHolder
类的实例:
ViewHolder holder = new ViewHolder();
然后你将拥有一个ViewHolder类的实例,这意味着垃圾收集器可以收集它,因此如果没有更多的引用,它将不会保留在内存中。如果ViewHolder
实例没有对它的引用,则可以收集它,以及仅包含来自ViewHolder
对象(ImageViews
)的引用的对象。
所以我的一般答案是:ViewHolder
模式,如果你正确使用它不会导致内存泄漏。