Android布局优化

前言

UI是整个APP性能的最前端展示,也是最容易看出性能问题的地方。Ui性能优化的目标为:
1、减少绘图的等待时间
2、使帧率更加平稳连贯

一般来说Android设备的屏幕刷新率为60帧每秒,要保持画面流畅不卡顿,就需要让每一帧的时间不超过16.6ms每帧。如果某些帧的渲染时间超过16.6ms,就会导致这段时间的画面发生跳帧,因此原本流畅的画面便发生了卡顿。

使用Layout Inspectot工具可以查看布局的层级

在这里插入图片描述

RelativeLayout和LinearLayout

RelativeLayout能够使布局更加扁平,而LinearLayout需要嵌套使用,在布局深度上,RelativeLayout更有优势。但是RelativeLayout在进程测量时,大部分时间需要进行多次测量,才能确定子View的大小,特别是当RelativeLayout嵌套使用的时候,耗时将更为严重,而LinearLayout只有在使用weight属性后,才会发生两次测量,从这一点讲,LinearLayout的测量效率要高于RelativeLayout。
一般来说,如果使用LinearLayout,一定要保证层级不能太深,如果使用RelativeLayout,则需要尽量避免嵌套。

include标签

include标签可以将一个指定的布局文件加载到当前的布局文件中,通过这种方式可以避免布局内容重写一遍。节省代码量,同时性能也更好。
<include layout="@layout/layout1"/>

merge标签

merge标签一般和include标签一起使用从而减少布局的层级。merge标签的目的是通过删减多余或者额外的层级,从而优化整个Android Layout的结构。核心功能就是减少冗余的层次从而达到优化UI的目的。如果当前的布局是一个竖直方向的LinearLayout,这时如果被包含的布局文件也采用了竖直的LinearLayout,那么显然被包含的布局文件中的LinearLayout是多余的,通过merge标签就可以去掉多余的那一层LinearLayout。
merge根节点内的控件布局取决于include这个布局的父布局是什么布局。

ViewStub

ViewStub继承了View,它非常轻量且宽高都是0,因此它本身不参与任何的布局和绘制过程,ViewStub的意义在于按需加载所需的布局文件,在实际的开发中,有很多布局文件在正常情况下不会显示,比如网络异常时的界面,这时候就没必要在整个界面初始化的时候将其加载进来,通过ViewStub就可以做到在使用的时候再加载,提高了程序初始化时的性能。
当ViewStub通过setVisibility或者inflate方法加载后,ViewStub就会被它内部的布局替换掉,这个时候ViewStub就不再是整个布局结构中的一部分了。
使用注意点:
1、ViewStub对象只可以Inflate一次,之后ViewStub对象会被置为空。
2、ViewStub不支持merge标签。

<ViewStub
    android:id="@+id/view_stub"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout="@layout/layout1"/>
View view = ((ViewStub)findViewById(R.id.view_stub)).inflate();  //加载出来用view接收
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一场雪ycx

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值