Android 4.1.2。我有LinearLayout
个孩子ListView
。我在此列表视图中添加了20行,其中包含三个TextView
控件的自定义行布局。这些行中有一半是可见的,所以我需要滚动查看其余的行。问题是当我开始从顶部或从底部滚动时,应用程序似乎会挂起几秒钟(中间似乎没问题)。
据我所知,有几种优化可以使用。到目前为止,我已经尝试过这个:
ArrayAdapter
中,我使用的是ViewHolder
,以避免拨打findViewById
。getView()
LayoutInflater
仅在convertView
为null
时使用{/ 1}}。getViewTypeCount()
返回1,getItemViewType(...)
返回0. setText()
和setColor()
的所有来电。列表视图还有哪些可能的瓶颈?
我的行布局:
<?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秒。因此,来回滚动会使应用程序冻结!
我在这里缺少什么?
答案 0 :(得分:3)
另一件需要考虑的事情是您的列表项可能会过度抽取,这可以通过设备上的开发人员设置中的选项显示。
对于一般性能问题,尤其是在ListView
中,我只能推荐Romain Guy的“史诗”文章:Android Performance Case Study。透支也被称为一个主要问题。