美文网首页android收录
Android性能优化----布局过度绘制

Android性能优化----布局过度绘制

作者: 徐大哈_401d | 来源:发表于2018-05-17 14:09 被阅读119次

Android系统每隔16ms就会发出一次VSYNC信号触发对UI进行渲染,如果这16ms内我们没有完成对视图的绘制,那么就会出现丢帧的情况,从而造成界面卡顿。

检测过度绘制

在设置中打开开发者选项中的调试GPU过度绘制--显示过度绘制区域。

颜色与过度绘制:

原色:没有过度绘制

蓝色:1 次过度绘制

绿色:2 次过度绘制

粉色:3 次过度绘制

红色:4 次及以上过度绘制

优化过度绘制:

1.在theme中去掉Activity中的默认背景色

<item name = "android:windowBackground">@null</item>

2.根布局设置了背景色,最好子布局能不设置尽量不设置

3.减少布局的嵌套,尽量避免LinearLayout的层层嵌套,合理使用RelativeLayout。但是说到这里又会引出两个布局的效率问题。我们知道RelativeLayout因为子view是相对依赖的关系,所以在onMeasure的时候会进行两次(LinearLayout有weight权重的时候也执行两次测量),所以在不影响层级的情况下还是尽可能的使用LinearLayout吧。为了优化层级,google大佬也推出了ConstraintLayout约束布局,不过说实话习惯了手动布局,对拖拽控件的方式有点别扭~

4.通过源码来探究RelativeLayout为何会测量两次

可以看到在onMeasure中有一个sortChildren方法,这个方法主要是对水平和竖直方法的子view进行排序整理,可以看到RULES_VERTILCAL和RULES_HORIZONTAL是一个int型的数组,里面存放的是一些相对位置的属性。然后把这些子view存放到mSortedVerticalChildren和mSortedHorizontalChildren数组里,通过名字就可以知道分别是存放垂直方向和水平方向上的view。

最后在onMeasure中对mSortVerticalChildren和mSortedHorizontalChildren里的view遍历测量,所以这就是为什么会测量两次的原因了。

相关文章

  • Android UI绘制过程与优化

    Android系统显示原理 性能分析工具 布局优化 避免过度绘制 启动优化 合理的刷新机制未完待续

  • 笔记:Android 性能优化

    Android 性能优化 Android性能优化主要有 布局优化、绘制优化、内存泄漏优化、响应速度优化、ListV...

  • app性能优化(转)

    Android面试——APP性能优化Android应用性能优化基础知识。布局优化避免OverDraw过渡绘制优化布...

  • 基本性能优化

    布局优化 避免过度绘制嵌套,导致16秒无法完成绘制 使用viewstub提高布局性能 内存优化 避免内存溢出和内存...

  • (十五)Android性能优化

    15.1 Android的性能优化方法 15.1.1 布局优化 15.1.2 绘制优化 15.1.3 内存泄露优化...

  • Android性能优化----布局过度绘制

    Android系统每隔16ms就会发出一次VSYNC信号触发对UI进行渲染,如果这16ms内我们没有完成对视图的绘...

  • Android性能优化之布局优化

    参考《Android性能优化之布局优化》 侵删 绘制的原理 Android需要把XML布局文件转换成GPU能够识别...

  • Android开发艺术探索之性能优化笔记

    Android性能优化 一,优化内容 布局优化、绘制优化、内存泄漏优化、响应速度优化、ListView优化、Bit...

  • Android性能优化

    Android性能优化包括布局优化、绘制优化、内存优化、线程优化、响应速度优化、Bitmap优化和ListView...

  • 性能优化 - 收藏集 - 掘金

    Android 性能优化 - 过度绘制解决方案 - Android - 掘金转载请注明出处:http://blog...

网友评论

    本文标题:Android性能优化----布局过度绘制

    本文链接:https://www.haomeiwen.com/subject/tlebdftx.html