Android UI渲染

1. 过度绘制优化

什么是过度绘制?

Overdraw(过度绘制)描述的是屏幕上的某个像素在同一帧的时间内被绘制了多次。在多层次重叠的UI结构里面,如果不可见的UI也在做绘制的操作,会导致某些像素区域被绘制了多次。这样就会浪费大量的CPU以及GPU资源。

从开发者选项可以设置看到过度绘制区域,红色是过度绘制最严重的区域。

优化方式:

1. 移除布局中多余的背景 
2. 减少层级嵌套,使用约束布局
3. 减少透明度使用

######自定义view onDraw造成的过度渲染,可以使用canvas.clipRect方法,来对canvas进行裁剪。或者使用canvas.quickReject.

2.其他UI优化

多使用padding代替margin

使用merge 可以减少层级结构。

使用ViewStub,延迟加载,不必须时候不加载

尽量少使用bitmap,多使用shape之类

16ms的问题

主流的刷新频率是60次/秒,折算出来就是16ms刷新一次。如果大于这个时间,人眼就会感觉到卡顿。但是16ms不是draw的时间,实际上留给draw的时间比这个要少一些,对于自定义view,onDraw的执行时长要尽量很少。

请注意:任何时候View中的绘制内容发生变化时,都会需要重新创建DisplayList,渲染DisplayList,更新到屏幕上等一系列操作。这个流程的表现性能取决于你的View的复杂程度,View的状态变化以及渲染管道的执行性能。举个例子,假设某个Button的大小需要增大到目前的两倍,在增大Button大小之前,需要通过父View重新计算并摆放其他子View的位置。修改View的大小会触发整个HierarcyView的重新计算大小的操作。如果是修改View的位置则会触发HierarchView重新计算其他View的位置。如果布局很复杂,这就会很容易导致严重的性能问题。

使用矢量图代替jpg, png

发布了17 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_24295537/article/details/104984171
今日推荐