Android性能优化--Overdraw(过度绘制)

2017-12-04  本文已影响198人  theFullHorizon

前言:近期Google中国给公司的应用提了一些优化方面的意见,该片讲述的是其中的意见之一:overdraw

基础知识

过度绘制定义

屏幕上的某个像素在同一帧的时间内被绘制了多次。

过度绘制的影响?

影响动画的播放,影响界面响应速度,浪费不必要的GPU

如何判断过度绘制的点?

  1. 开发者选项中调试GPU过度绘制开启,界面显示红色则为需要关注的地方
    蓝色(1x) 绿色(2x) 淡红色(3x) 红色(4x+)

  2. Hierarchy Viewer

从层级角度分析存在的影响性能的点
查看层级超过5层, 你就需要考虑优化下布局了~

Measure红点, 可能是布局中嵌套RelativeLayout, 或是嵌套LinearLayout都使用了weight属性.
Layout红点, 可能是布局层级太深.
Draw红点, 可能是自定义View的绘制有问题, 复杂计算等.

推荐实践

Removing unneeded backgrounds in layouts.

Flattening the view hierarchy.

具体结合Hierarchy Viewer分析出过多重叠的父布局点(两个父节点并列的情况),结合具体的业务场景,合理使用Include,Viewstub,Merge来减少层级。

自定义控件onDraw()方法[未验证]

onDraw()中使用canvas.clipRect() , clipPath来帮助系统识别那些可见的区域

其他优化方向

AS--> Inspect Code --> 分析当前工程


Analyze tools.PNG

会得到类似这样的优化建议:
Handler reference leaks, HashMap can be replaced with AparseArray, Inefficient layout weight等,按照给出的AS给出的工具来具体的

总结

参考

Reducing Overdraw

Inspect GPU Rendering Speed and Overdraw

Performance and View Hierarchies

上一篇下一篇

猜你喜欢

热点阅读