0
点赞
收藏
分享

微信扫一扫

Android性能优化-UI优化

杰森wang 2021-09-30 阅读 83
性能优化

一、Android渲染机制

大家在开发应用的时候或多或少都遇到过可感知的界面卡顿现象,尤其是在布局层次嵌套太多,存在不必要的绘制,或者onDraw方法中执行了过多耗时操作、动画执行的次数过多等情况下,很容易造成此类情况。如今APP设计都要求界面美观、拥有更多的动画、图片等时尚元素从而打造良好的用户体验。但是大量复杂的渲染工作很可能造成Android系统压力过大,无法及时完成渲染工作。那么多久执行一次渲染,才能让界面流畅运行呢?

如上图所示,Android系统每隔16ms就会发送一个VSYNC信号(VSYNC:vertical synchronization 垂直同步,帧同步),触发对UI进行渲染,如果每次渲染都成功,这样就能够达到流畅的画面所需要的正常帧率:60fps。一旦这时候系统正在做大于16ms的耗时操作,系统就会无法响应VSYNC信号,执行渲染工作,导致发生丢帧现象。

例如上图所示:如果你的某个操作花费时间是24ms,系统在得到VSYNC信号的时候就无法进行正常渲染,只能等待下一个VSYNC信号(第二个16ms)才能执行渲染工作。那么用户在32ms内看到的会是同一帧画面。

用户容易在UI执行动画、ListView、RecyclerView滑动的时候感知到界面的卡顿与不流畅现象。所以开发者一定要注意在设计布局时不要嵌套太多层,多使用 include方法引入布局。同时不要让动画执行次数太多,导致CPU或者GPU负载过重

看到这里同学可能会疑问:为什么是16ms渲染一次,和60fps有什么关系呢?下面让我们看一下原理:

那么只要解释为什么是60fps,这个问题就迎刃而解:

二、引起界面卡顿的原因

2.1 界面卡顿的主要元凶—— 过度绘制(Overdraw)
1 什么是过度绘制?
2 如何发现过度绘制?

对于Overdraw这个问题还是很容易发现的,我们可以通过以下步骤打开显示GPU过度绘制(Show GPU Overrdraw)选项

打开以后之后,你会发现屏幕上有各种颜色,此时你可以切换到需要检测的程序与界面,对于各个色块的含义,请看下图:

3 解决问题的工具和方法

三、使用布局标签优化布局

四、优化常用工具

参考:https://www.jianshu.com/p/906cd1af2ce7

举报

相关推荐

0 条评论