android ListView性能优化之路 -- 中级

这是一个典型的ListView,当然,不是那种demo级的简单布局。

优化中级:自身布局级优化

界面布局:系统在绘制一个界面的时候,需要知道知道各个元素之间的关系,所以有onMeasure(),一个简单的界面,在高手和初学者手里能表现出巨大的性能差距。

简单的例子就是上图的按钮,可以只用一个TextView来实现,也可以用一个Layout+ImageView+TextView来实现,性能可想而知。

ListView(包括像GridView),自身有着很强的定制性和适应性。它的布局相对于普通的View更为重要。ListView自身,尽可能的用FillParent,因为ListView绘制的时候,如果不知道自身的占位,那么在计算的时候,需要不停的getView来计算自身的长度和宽度,当然即使用了FillParent,它也要执行相当数量的getView来测算。

ItemView,因为使用频繁,所以它的每一点改进,都可能导致整体性能的显著提升。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="64dip"
    android:background="@color/_FFFAFAFA" >

    <TextView
        android:id="@+id/item_bg"
        android:layout_width="match_parent"
        android:layout_toLeftOf="@+id/item_theline"
        android:layout_height="64dip" 
        android:background="@drawable/app_list_item_selector"/>
    
    <com.xunlei.appmarket.app.ui.ThumbnailImageView
        android:id="@+id/item_icon"
        android:contentDescription="@string/app_name"
        android:layout_width="48dip"
        android:layout_height="48dip"
        android:layout_centerVertical="true"        
        android:layout_marginLeft="8dip"/>


    <TextView
        android:id="@+id/item_rightbtn"
        android:layout_width="64dip"
        android:layout_height="64dip"
        android:ellipsize="middle"
        android:layout_centerVertical="true" 
        android:layout_alignParentRight="true"
        android:paddingTop="10dp"
        android:gravity="center"
        android:drawableTop="@drawable/download"  
        android:text="@string/download" 
        android:singleLine="true"
        android:textSize="12sp"
        android:background="@drawable/app_list_item_selector"
        android:textColor="@color/_FF777777" />
    
    <ImageView
        android:id="@+id/item_theline"
        android:contentDescription="@null"
        android:layout_width="wrap_content"
        android:layout_height="48dip"
        android:layout_centerVertical="true" 
        android:background="@drawable/list_item_divider"         
        android:layout_toLeftOf="@+id/item_rightbtn"/>

    <RatingBar
        android:id="@+id/item_score"
        style="@style/myRatingBar"
        android:layout_toRightOf="@+id/item_icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginLeft="10dip"
        android:layout_marginTop="38dip"
        android:numStars="5"
        android:stepSize="0.1" />

    <TextView
        android:id="@+id/item_appsize"
        android:layout_width="wrap_content"
        android:layout_height="20dip"
        android:layout_marginTop="15dip"
        android:layout_toLeftOf="@+id/item_theline"
        android:gravity="center_vertical"
        android:paddingRight="8dip"
        android:singleLine="true"
        android:text="@string/downloadsize"
        android:textColor="@color/_FF777777"
        android:textSize="12sp"/>
    <TextView
        android:id="@+id/item_downloadedcount"
        android:layout_width="wrap_content"
        android:layout_height="20dip"
        android:layout_marginTop="35dip"
        android:layout_toLeftOf="@+id/item_theline"
        android:gravity="center"
        android:paddingRight="8dip"
        android:singleLine="true"
        android:text="@string/downloadcount"
        android:textColor="@color/_FF777777"
        android:textSize="12sp" />
</RelativeLayout>

布局的优化原则就是尽量简单,层级尽量少。当然,如果你觉得加一些层级来增强代码可读性,那就智者见智了。

优化无止境,没有最好,只有更好,共勉之。

posted on 2013-06-07 21:13  asi24  阅读(470)  评论(0编辑  收藏  举报