我正在尝试改进列表视图渲染性能并调查现在的微调。 (我们使用viewHolder,获取图像异步,暂停滚动图像显示,禁用滚动缓存已经)具有可见性元素的膨胀布局的性能影响
现在我正在检查布局,并遇到单个列表项的布局,如下所示的getView中充气膨胀。
getView()自定义列表适配器
if (convertView == null) {
convertView = inflater.inflate(R.layout.zzz_list_item, null);
...save stuff in holder etc.
zzz_list_item.xml
<LinearLayout
android:id="@+id/layout_success"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/base"
android:orientation="vertical"
android:paddingBottom="30dp" >
...many lines of a "success" item layout
</LinearLayout>
<LinearLayout
android:id="@+id/layout_failure"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:visibility="gone" >
...many lines for a failure item layout
</LinearLayout>
能见度获取我们的自定义列表视图适配器的getView方法进一步下行控制
getView()方法 - 执行e非常时期
if(isSuccessfulItem){
((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.GONE);
((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.VISIBLE);
} else {
((LinearLayout) convertView.findViewById(R.id.layout_failure)).setVisibility(View.VISIBLE);
((LinearLayout) convertView.findViewById(R.id.layout_success)).setVisibility(View.GONE);
}
虽然这也可能是一个小的性能猪(getView是昂贵的),我不知道它会是有意义的重构和分割成功和失败的元素处理成两个不同的布局,这将然后分别使用getViewTypeCount()
和getItemViewType(int position)
进行充气。
即使在通货膨胀期间设置为visibility = GONE,我的列表项目布局的附加失败布局代码(因此文件大小是否增加)是否会影响性能?
任何见解将不胜感激,谢谢。
感谢您的见解 - 那正是我想知道的。我们正在应用程序中遇到一些内存问题,因此清理这些视图可能会有助于使应用程序更轻。我知道指定根节点的膨胀,我们正在使用持有者模式,但无论如何,感谢提示! – Makibo 2013-07-11 06:32:41