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

本文深入探讨了ListView布局优化技巧,从界面布局优化、ItemView改进到ListView自身属性设置,强调了性能提升的重要性。通过减少层级、合理利用属性如FillParent,以及对频繁使用的ItemView进行精细调整,实现整体性能显著提升。

这是一个典型的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>

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

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

转载于:https://www.cnblogs.com/asi24/archive/2013/06/07/3125228.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值