优化布局不是说优化界面的显示效果更好看、更美观。是指让界面的交互体验更好、更流程。因为手机性能有限,而绘制UI布局是很吃资源的(CPU,GPU)。所以,需要我们写出优美简洁的布局,尽可能的少占资源。
我们平时玩游戏的时候,会看到游戏中会显示fps。当fps的值越大游戏越是流畅,当fps接近60的时候再往上也无法感知了。fps是指每秒钟显示的帧数,人眼感觉的平滑的帧数就是在60帧左右。所以,如果想要我们写出的UI体验看起来是流畅的,就要达到60fps,也就是一秒钟绘制60帧图,一帧图需要在16ms中绘制出来。如果我们的布局写的过于复杂,系统没办法在16ms中绘制出一帧的时候,这时候的页面体验就会让人感觉卡顿。
对于像我们大部分页面都有的顶部的TopBar这类UI,完全不需要每一个UI自己都重新写一份,代码冗余也不利于管理。这时候我们可以将TopBar的部分单独写一个layout,然后在需要的地方直接通过include标签引进来即可。
使用merge标签搭配include标签可以减少嵌套,不然正常情况下使用include会再增加一层嵌套的。
对于一些场景下使用viewstub是个不错的选择,比如你默认要隐藏部分View,如果使用传统的方式尽管使用了VISIABLE=GONE但是还是会被加载消耗资源,如果使用viewstub的话是不会加载的。
这个在之前的有一篇专门介绍的文章了,减少布局的嵌套使用这个布局是最好的了,以前那种使用好几层嵌套才能实现的UI。现在只需要ConstraintLayout就可以了。强烈推荐!!
这里介绍Android系统中提供的辅助开发工具:
我们可以看到在屏幕的下方有条形图随着我们的交互在不停的变化,每个色值都是代表着GPU、CPU等的耗时,一条绿色的横线是16ms,所以如果你在滑动页面的时候所有的条形图都在绿线以下就表明是非常流畅的,否则是有卡顿的存在的。下图是今日头条的页面示例:
谷歌官方给的参考是:蓝色->绿色->淡红->深红。 表示UI从绘制一次都多次重复绘制的程度,颜色越红表示过渡绘制越是严重。所以我们要尽量控制我们的UI绘制是显示的蓝色或者绿色。