「深入理解Android布局优化 1」-布局的加载流程与绘制原理

前言

本篇文章是《深入理解Android布局优化》系列文章的第一篇。系列的主要目的是希望将Android开发中涉及布局优化的部分做一次系统的归纳、总结和学习。本系列文章包含理论基础常见工具项目实践三个部分。

理论基础:「深入理解Android布局优化 1」-布局的加载流程与绘制原理,主要讲解布局的加载流程与绘制原理,从源码上发现布局的性能瓶颈。

常见工具:「深入理解Android布局优化 2」-常见工具的使用,主要讲解Android布局优化时各种常见工具的使用。

项目实践:以一个实际的APP为例,将学习到的理论和工具,实际运用到Android开发中。

本文中实践时使用的项目地址:https://github.com/linux-link/Fan,可以先阅读这篇文章了解这个项目一次组件化与Android Jetpack的实践

本篇属于三个部分中的理论基础部分。

目录

  • Android系统的绘图机制
  • Activity的组成
  • 布局文件的加载流程
  • View的绘制流程
  • 布局优化的简单建议
  • 总结

正文

一、Android系统的绘图机制

Android系统每隔16ms就重新绘制一次Activity,这就要求UI界面必须在16ms内完成屏幕刷新的全部逻辑操作,这样才能达到每秒60fps,然而这个fps是由手机硬件所决定,现在大多数手机屏幕刷新率是60Hz(赫兹是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量),也就是说我们有16ms(1000ms/60fps=16.66ms)的时间去完成每帧的绘制逻辑操作,如果超过了就会出现所谓的丢帧。实际开发中复杂的界面往往在16ms内完成全部绘制,但是尽量降级UI的绘制时间,总是可以有效的降低卡顿感。

对于Android系统的硬件绘图机制,并非布局优化的重点,有兴趣的可以翻看文末的参考资料。

二、Activity的组成

一个Activity层级结构图,如下所示
「深入理解Android布局优化 1」-布局的加载流程与绘制原理_第1张图片

它有点像洋葱圈一层包裹着一层,下面我们就来逐个介绍一下。

  • PhoneWindow

    PhoneWindow是Window的子类,Window是顶级窗口外观和行为策略的抽象基类。它提供标准的UI策略,例如背景,标题区域,默认密钥处理等。它的唯一实现就是PhoneWindow

  • DecorView

    DecorView是一个ViewGroup类,继承自FrameLayout,是Activity在绘制布局文件时的宿主,也可以把它理解为绘制布局文件时的“画布”。

  • TitleActionBar

    Android提供一个默认的ActionBar,我们在写demo时经常会看到这个ActionBar,一般正式开发时,会在Style.xml中把它去掉.