布局显示过程及效率

一. 布局显示过程

1 inflate:

将xml格式的layout文件实例化为相应的View对象

2 measure:

从根节点开始计算所有View的尺寸,会调用每个·View的measure方法

3 layout

从根节点开始计算所有View的位置

Measure和layout都是递归获取View的大小和位置,都是以深度为优先级,可以看出层级越深元素越多,耗时也就越长;

4 draw

绘制View

二. 影响UI效率的因素

  • View太多:
    更多的inflate,计算更多更复杂,draw时间长
  • 布局太深:
    更多的Measure和layout
  • 图片&背景:
    图片资源过大,缩放耗时
    过渡绘制
  • 频繁刷新UI:
    占用Cpu资源
    界面卡顿,交互反应慢,甚至造成ANR

三. 优化实践

1.减少View

尽可能减少控件的使用,例如

2.使用ViewStub标签

对于不需要立即显示的视图,可以使用/</ViewStub/>标签按需加载

3.使用include标签

将公共布局抽取到单独文件,并通过include标签引用,以减少视图层级和代码复用

过度绘制:
多次绘制或覆盖屏幕的同一像素
场景:通常发生在布局层叠和视图透明度设置不当时
问题:导致应用性能降低,消耗更多的CPU资源,从而影响体验
解决手段:
1.减少不必要的嵌套和重叠
2.避免在视图上使用不透明或半透明背景,如果某个视图需要背景色,可以考虑使用完全不透明的颜色
使用android:windowBackground属性:主题中设置颜色,可以避免每个布局都设置背景,造成重复;如果每个页面背景不同,window应该设置为透明

检查过度渲染的方法

连接实机进入开发者选项

在开发者选项中找到 -调试GPU过度绘制,会出现如下的画面:
在这里插入图片描述
其中的颜色就代表渲染程度:

  • 真彩色:无过度绘制
  • 蓝色:过度绘制一次
  • 绿色:过度绘制两次
  • 粉色:过度绘制3次
  • 红色: 过度绘制4次及更多
  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值