【Android 】UI优化策略

大多数用户感知到的卡顿等性能问题的最主要根源都是因为渲染性能。从设计师的角度,他们希望App能够有更多的动画,图片等时尚元素来实现流畅的用户体验。但是Android系统很有可能无法及时完成那些复杂的界面渲染操作。Android系统每隔16ms发出VSYNC信号,触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的60fps,为了能够实现60fps,这意味着程序的大多数操作都必须在16ms内完成。

Android UI性能测试

如何才能给用户一个良好的UI体验呢?

  • 不要在主进程去做耗时的操作
  • 减少View的布局层级
  • 避免过渡绘制
  • 合理使用布局容器

如何有效减少View的层级?(降低view的层级,有时可以有效降低measure所需的时间)

  • 通过AndroidStudio > Tools > Layout Inspector工具,查看应用的布局层级 
  • 尽量减少布局嵌套(通过ConstraintLayout、RelativeLayout)
  • 在xml中,通过<include>、<merge>复用布局

如何有效避免过渡绘制?(当前看不见的东西,就不要画出来,画出来又看不到,岂不是浪费)

  • 通过真机的开发者选项 > 调试GPU过度绘制,查看应用过度绘制的情况
    • adb开启
      • adb shell setprop debug.hwui.overdraw show 
    • adb关闭
      • adb shell setprop debug.hwui.overdraw false 
  • 删除不必要的背景色(比如:window的默认背景、imageView的默认背景图)
  • 使用Canvas.clipRect()(参考:android.support.v4.widget包下有DrawerLayout类)
  • 使用ViewStub,延迟加载布局

如何合理使用布局容器?(不同的布局,measure所需的时间也不同)

  • 绘制相同的元素,不同容器的onLayout、onDraw的时间相差不大,但onMeasure所需的时间可能相差很大
  • 单层LinearLayout中,measure只执行1次;如果子view有layout_weight,measure会执行2次
  • 单层RelativeLayout中,measure执行2次;
  • 两层LinearLayout嵌套,不如使用1层RelativeLayout;
  • 在RelativeLayout中,设置子View的高度等于父布局的高度,性能更好;(推荐子view使用padding代替margin)
  • 单层布局优先使用LinearLayout、FrameLayout
  • 超过4层嵌套,建议使用ConstraintLayout(ConstraintLayout性能分析

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值