前面几篇文章在前面几篇文章当中,
我们学习了如何通过合理管理内存,app的优化启动的方式来提升应用程序的性能。实际上界面布局也会对应用程序的性能产生比较大的影响,如果布局写得嵌套多,重复布局多次出现,一个小的布局利用很多控件来实现的话,那么程序加载UI的速度就会非常慢,从而造成不好的用户体验。,如何通过优化布局来提供应用程序的性能???
本文通过示例,为大家讲解一下。
总体原则:少用,复用,减少嵌套!
减少布局层次,加快渲染速度
View的数量减少伴随着的就是层级的减少。从而达到结构清晰,渲染速度快的效果。
当线性布局LinearLayout和相对布局都能使用时,优先使用线性布局LinearLayout,因为RelativeLayout会让子View调用至少2次onMeasure,LinearLayout有weight时,才会让子多次调用onMeasure。Measure的耗时越长那么绘制效率就低。(下图可以看打印日志,代码是重写控件的onMeasure,在super()下加句打印)
尽量避免RelativeLayout嵌套RelativeLayout
重用布局文件
是有些时候我们可能需要反复利用某个已经写好的布局,总是使用复制粘贴的方式来进行布局重用,这显然是一种很笨的做法。而Android当然也已经充分考虑到了布局重用的重要性,于是提供了< include >和< merge >这两个非常有用的标签,下面我们来学习一下。
重用< include >
新建一个hotanddown.xml布局文件
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="213dp"
android:layout_height="284dp"
>
<TextView
android:id="@+id/hotplayer_image"
android:layout_width="match_parent"
android:layout_height="110dp"
android:background="@drawable/hotplayer"
android:clickable="false"
android:focusable="false"
android:gravity="bottom|center_horizontal"
android:paddingBottom="15dp"
android:textColor="@color/colorWhite"
android:textSize="24sp"/>
<TextView
android:id="@+id/hotplayer_ione"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_below="@+id/hotplayer_image"
android:background="#1D4468"
android:clickable="false"
android:drawableLeft="@drawable/first"
android:drawablePadding="10dp"
android:maxLines="1"
android:ellipsize="end"
android:focusable="false"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:text="真正男子汉"
android:textColor="@color/colorWhite"
android:textSize="18sp"/>
<ImageView
android:id="@+id/conner_one"
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_below="@+id/hotplayer_ione"
android:clickable="false"
android:focusable="false"
android:src="@drawable/parting_line"/>
<TextView
android:id="@+id/hotplayer_itwo"
android:layout_width="match_parent"
android:layout_height="52dp"
android:layout_below="@+id/conner_one"
android:background="#1D4468"
android:clickable="false"
android:drawableLeft="@drawable/second"
android:drawablePadding="10dp"
android:focusable="false"
android:maxLines="1"
android:ellipsize="end"
android:gravity="center_vertical"
android:paddingLeft="10dp"
android:text="爸爸去哪儿"
android:textColor="@color/colorWhite"
android:textSize="18sp"/>