本篇文章是《深入理解Android布局优化》系列文章的第一篇。系列的主要目的是希望将Android开发中涉及布局优化的部分做一次系统的归纳、总结和学习。本系列文章包含理论基础、常见工具、项目实践三个部分。
理论基础:「深入理解Android布局优化 1」-布局的加载流程与绘制原理,主要讲解布局的加载流程与绘制原理,从源码上发现布局的性能瓶颈。
常见工具:「深入理解Android布局优化 2」-常见工具的使用,主要讲解Android布局优化时各种常见工具的使用。
项目实践:以一个实际的APP为例,将学习到的理论和工具,实际运用到Android开发中。
本文中实践时使用的项目地址:https://github.com/linux-link/Fan,可以先阅读这篇文章了解这个项目一次组件化与Android Jetpack的实践
本篇属于三个部分中的理论基础部分。
Android系统每隔16ms就重新绘制一次Activity,这就要求UI界面必须在16ms内完成屏幕刷新的全部逻辑操作,这样才能达到每秒60fps,然而这个fps是由手机硬件所决定,现在大多数手机屏幕刷新率是60Hz(赫兹是国际单位制中频率的单位,它是每秒中的周期性变动重复次数的计量),也就是说我们有16ms(1000ms/60fps=16.66ms)的时间去完成每帧的绘制逻辑操作,如果超过了就会出现所谓的丢帧。实际开发中复杂的界面往往在16ms内完成全部绘制,但是尽量降级UI的绘制时间,总是可以有效的降低卡顿感。
对于Android系统的硬件绘图机制,并非布局优化的重点,有兴趣的可以翻看文末的参考资料。
它有点像洋葱圈一层包裹着一层,下面我们就来逐个介绍一下。
PhoneWindow
PhoneWindow是Window的子类,Window是顶级窗口外观和行为策略的抽象基类。它提供标准的UI策略,例如背景,标题区域,默认密钥处理等。它的唯一实现就是PhoneWindow
DecorView
DecorView是一个ViewGroup类,继承自FrameLayout,是Activity在绘制布局文件时的宿主,也可以把它理解为绘制布局文件时的“画布”。
TitleActionBar
Android提供一个默认的ActionBar,我们在写demo时经常会看到这个ActionBar,一般正式开发时,会在Style.xml中把它去掉.