2013-05-09 24 views
2

我正在尝试改进列表视图渲染性能并调查现在的微调。 (我们使用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,我的列表项目布局的附加失败布局代码(因此文件大小是否增加)是否会影响性能?

任何见解将不胜感激,谢谢。

回答

3

是否其他故障布局代码(并因此增加了文件大小 )为我的列表项的布局影响性能,哪怕是 设置为可见=通货膨胀期间去了哪里?

无论哪种方式的性能增益或损失是最小的。可见性设置为gone的视图在布局和测量阶段不需要计算,因为它被忽略,但它确实会占用内存(这是您可以谈论的内容)。即使您不需要/使用行布局的故障部分,也可以使用当前的实现方式占用内存(将其乘以屏幕上可见的行数)。将当前行分成两部分将清除内存需求,因为每行只有实际使用的视图。

如果我是你,我会实现两行类型,因为我认为它更干净(并且它也不会在内存中添加无用的视图)。

你可能知道这一点,但使用:

convertView = inflater.inflate(R.layout.zzz_list_item, convertView, false); 

也,缓存在持有人行的意见。

+0

感谢您的见解 - 那正是我想知道的。我们正在应用程序中遇到一些内存问题,因此清理这些视图可能会有助于使应用程序更轻。我知道指定根节点的膨胀,我们正在使用持有者模式,但无论如何,感谢提示! – Makibo 2013-07-11 06:32:41