滚动时,ListView有20个项目滞后

时间:2013-01-13 11:37:58

标签: android listview android-arrayadapter

Android 4.1.2。我有LinearLayout个孩子ListView。我在此列表视图中添加了20行,其中包含三个TextView控件的自定义行布局。这些行中有一半是可见的,所以我需要滚动查看其余的行。问题是当我开始从顶部或从底部滚动时,应用程序似乎会挂起几秒钟(中间似乎没问题)。

据我所知,有几种优化可以使用。到目前为止,我已经尝试过这个:

  1. 在我的自定义ArrayAdapter中,我使用的是ViewHolder,以避免拨打findViewById
  2. getView() LayoutInflater仅在convertViewnull时使用{/ 1}}。
  3. getViewTypeCount()返回1,getItemViewType(...)返回0.
  4. 在我的短信视图中删除对setText()setColor()的所有来电。
  5. 断开调试器的连接。
  6. 列表视图还有哪些可能的瓶颈?

    我的行布局:

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">
        <TextView
            android:id="@+id/my_text1"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:textColor="@android:color/white"
            android:textStyle="bold" />
    
        <TextView
            android:id="@+id/my_text2"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="4"
            android:ellipsize="end"
            android:textColor="@android:color/white" />
    
        <TextView
            android:id="@+id/my_text3"
            android:layout_width="0dip"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:gravity="right"
            android:textColor="@android:color/white" />
    </LinearLayout>
    

    我确实怀疑layout_weight属性,但删除它们 not 帮助!在解决这个滞后问题的另一个尝试中,我的ListView具有以下样式:

    <ListView
            android:id="@+id/my_list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_margin="3dip"
            android:background="@android:color/transparent"
            android:cacheColorHint="@android:color/transparent"
            android:persistentDrawingCache="scrolling"
            android:scrollingCache="false" />
    

    正如你所看到的,我几乎尝试过所有事情。不过,当我滚动这20行时,UI在到达顶部/底部时会挂起2-4秒。因此,来回滚动会使应用程序冻结!

    我在这里缺少什么?

1 个答案:

答案 0 :(得分:3)

另一件需要考虑的事情是您的列表项可能会过度抽取,这可以通过设备上的开发人员设置中的选项显示。

对于一般性能问题,尤其是在ListView中,我只能推荐Romain Guy的“史诗”文章:Android Performance Case Study。透支也被称为一个主要问题。