一、Android系统是如何处理UI组件的更新操作
- Android需要把XML布局文件转换成GPU能够识别并绘制的对象。这个操作是在 DisplayList的帮助下完成的。DisplayList持有所有将要交给GPU绘制到屏幕上的数据信息。
- CPU负责把UI组件计算成Polygons,Texture纹理,然后交给GPU进行栅格化渲染。
- GPU进行栅格化渲染。
- 硬件展示在屏幕上。
二、Android布局优化常用方法
减少层级,越简单越好,减少overdraw,就能更好的突出性能
- 首先是善用相对布局Relativelayout可以通过扁平的RelativeLayout降低LinearLayout嵌套所产生布局树的层级
- 布局优化的另外一种手段就是使用抽象布局标签include、merge、ViewStub
- 使用Android新的布局方式ConstaintLayout(约束布局)
- 利用Android Lint工具寻求可能优化布局的层次
include标签
include标签常用于将布局中的公共部分提取出来
merge标签
merge标签是作为include标签的一种辅助扩展来使用,它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套
viewstub标签
用来在程序运行时简单的填充布局文件
使用组合控件: 包含了一个ImageView以及一个TextView控件的LinearLayout如果能够作为一个组合控件将会被更有效的处理。
合并作为根节点的帧布局(Framelayout) :如果一个帧布局时布局文件中的根节点,而且它没有背景图片或者padding等,更有效的方式是使用merge标签替换该Framelayout标签 。
无用的叶子节点:通常来说如果一个布局控件没有子视图或者背景图片,那么该布局控件时可以被移除(由于它处于 invisible状态)。
无用的父节点 :如果一个父视图即有子视图,但没有兄弟视图节点,该视图不是ScrollView控件或者根节点,并且它没有背景图片,也是可以被移除的,移除之后,该父视图的所有子视图都直接迁移至之前父视图的布局层次。同样能够使解析布局以及布局层次更有效。
过深的布局层次:内嵌过多的布局总是低效率地。考虑使用一些扁平的布局控件,例如 RelativeLayout、GridLayout ,来改善布局过程。默认最大的布局深度为10 。