加载ListView的速度更快,比Viewholder方法更快

时间:2012-07-26 14:58:41

标签: android android-listview

在为listView充气视图时,最好是在.xml文件中没有android:text的所有textViews以及这会影响速度多少?那么ViewStubs会更快吗?

当使用8个没有android:text的textViews和使用android:text =“@ string / abc”膨胀LinearLayout时,这会改变什么吗? 请注意,我正在重复使用视图,因此可能只有10个被充气然后重复使用我不知道。

我正在使用中兴刀片进行开发,因此单个600Mhz CPU而不是四核......

3 个答案:

答案 0 :(得分:8)

你可以尝试这个,不确定它是否会加速,但是试一试。

在后台线程中扩展布局。

View getView(int position, View convertView, ...) {
    View v;
    if (convertView == null) {
        Start a background thread to inflate your linearLayout. 
        Pass item data and view 'v' to it.

        v = inflate a simple dummy textview;
        return v;
    }
    set normal stuff to convertview here.
    return convertView ;
 }

在后台主题中,

  • 将您的Linearlayout扩展为'v'
  • 设置所有数据。
  • 然后使视图v无效。

    v.postInvalidate();
    

答案 1 :(得分:3)

这在加快列表视图,尤其是View Holder位时非常有用:http://developer.android.com/training/improving-layouts/smooth-scrolling.html

我也有一台ZTE Blade,它们很慢,但运行良好的应用程序在“正常”手机上运行得非常棒:)

答案 2 :(得分:3)

如果您要替换textviews中的文本,那么您不应该在XML中填充它们。

在简单的列表视图中很有吸引力的性能杀手是嵌套的线性布局。通过一些工作,任何linearlayout树都可以用relativelayout替换。

确保你没有在if(convertView == null){block之外使用findViewById使用ViewHolder样式或只是在view.setTag中设置(R.id.resId,findViewById(R.id.resID) )

您在评论中提到您从asynctask返回时遇到延迟。确保在每次输入后没有重新加载表格。对数据源进行批量更新,然后重新加载表。