12

在为 listView 膨胀视图时,最好在 .xml 文件中包含所有没有 android:text 的 textView,这对速度有多大影响?ViewStubs 怎么样,会更快吗?

当使用 8 个没有 android:text 和 android:text="@string/abc" 的 textView 为 LinearLayout 充气时,这会改变什么吗?请注意,我正在重用视图,所以也许只有 10 个被夸大然后重用我不知道。

我正在 ZTE Blade 上开发,所以这是一个 600Mhz CPU 而不是四核......

4

3 回答 3

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();
    
于 2012-08-02T14:43:55.043 回答
3

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

我也有一个 ZTE Blade,它们很慢,但是在它上面运行良好的应用程序在“普通”手机上运行惊人:)

于 2012-07-26T15:13:51.157 回答
3

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

在简单的列表视图中,一个真正的性能杀手是嵌套的线性布局。通过一些工作,任何线性布局树都可以用相对布局替换。

通过使用 ViewHolder 样式或简单地在 view.setTag(R.id.resId, findViewById(R.id.resID)) 中设置,确保您没有在 if (convertView == null) { 块之外使用 findViewById

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

于 2012-08-06T05:42:19.747 回答