在listview中回收视图,值得吗?

时间:2010-09-28 22:59:06

标签: android listview android-arrayadapter

在Android listview上覆盖baseadapter时,必须实现此方法public View getView(int position, View convertView, ViewGroup parent)。 convertview是以前在滚动时从列表中删除的视图,它被赋予以便您可以重用该视图而不是创建新视图。

我的问题是,是否真的有必要重用视图?如果只更改了一段数据,我可以理解重用它。但创建视图的开销真的很重要吗?关于使用我见过的列表视图的每个教程都会告诉您回收视图,即使是像文本视图这样简单的简单视图。

我想我的问题是Google为什么决定将此作为getView方法的默认行为?

2 个答案:

答案 0 :(得分:13)

回收视图的几个原因:

  • 对象创建相对昂贵。创建的每个其他对象都需要由垃圾收集系统处理,并且至少会暂时增加内存占用
  • 这对于更复杂的视图更为重要,但是扩展和布置视图对象可能很昂贵。大多数情况下,您只是对getView中的视图进行了一些小的更改,这些更改不会影响布局(例如,设置文本),因此您可以避免布局开销。
  • 请记住,Android旨在在资源受限的环境中运行。
  • 最后,它已经为你做了,而且它不会伤害任何东西,所以为什么不用呢?

答案 1 :(得分:7)

有必要吗?只有当您在Nexus One上的平移期间需要额外的30-40 fps时。 :)(参见http://code.google.com/events/io/2010/sessions/world-of-listview-android.html幻灯片,幻灯片13-17)

为什么要忽略95%为您完成的重大优化,让设备能够正常工作?