在ViewHolder模式中,将ViewHolder设置为静态是否对性能至关重要?

13

ViewHolder模式中,将ViewHolder声明为static对性能是否至关重要?

  

ViewHolder对象将每个组件视图存储在布局的标签字段中,因此您可以立即访问它们,而无需重复查找它们。首先,您需要创建一个类来保存您确切的视图集。例如:

static class ViewHolder {
  TextView text;
  TextView timestamp;
  ImageView icon;
  ProgressBar progress;
  int position;
}
3个回答

8

这并不影响性能,而是关于使用。如果 ViewHolder 类不是静态的,那么您需要提供父类的实例:

No enclosing instance of type Type is accessible. 
Must qualify the allocation with an enclosing instance of type Type 
(e.g. x.new A() where x is an instance of Type).

10
如果ViewHolder类在适配器类内部使用,那么您无需提供父类的实例。 - IgorGanapolsky
但是正如 https://dev59.com/f2gv5IYBdhLWcg3wD8yY 中所指出的那样,这可能会泄漏适配器。 - divyenduz

1

编辑:误解了问题——似乎你特别问如何将其变为static。这对性能并不关键,但是理念是每一点都有帮助。

最终编辑:Java中的静态嵌套类,为什么?

====

以下是原始答案:

从一个重型的ListView(或其他类型的可回收AdapterView)中提取性能非常好。然而,最好的方法是通过某种方式对性能进行分析。

此外,在Google IO 2010上,他们推荐使用这种方法:

http://www.youtube.com/watch?v=wDBM6wVEO70

编辑:

此外,这里有一个链接到traceview,可以对性能进行分析,但我不确定它的效果如何。

http://developer.android.com/tools/debugging/debugging-tracing.html


-3

这并不是强制性的。但是当你像这样做时,当你的适配器视图为空时,你再次使用视图。你正在创建一个视图并为视图部分分配值,并使用静态类ViewHolder标记整个视图。因此,当您返回并且视图不为空时,可见部分将来自获取标记。这是如何创建更少的对象以及减轻适配器工作负载的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接