Listview 子控件重复加载
这是一个常见的listview 资源文件的写法。
1 2 3 4 5 |
|
注意到android:layout_height
被设置为wrap_content
,这似乎很合理。但如果我们留心的话可以发现,与这个listview 关联的adapter对象的getView()
方法被重复调用了好几遍!这对于那些依赖listview 展示大量数据的应用来说,绝对是性能打击。
解决方案:
将这个属性设置为match_parent
或者固定的数值
原因:
通过分析AbsListView 以及Listview的代码,发现答案应该在onMeasure()
方法里:由于wrap_content
并没有指定一个固定值,系统需要通过尝试layout来满足wrap_content
。每次尝试都会调用onMeasure()
,layoutChildren()
,使得getView()
被重复调用