Android 关于过度绘制的那些事儿 UI流畅度优化

检测方法

1.开发者选项 - 调试过度绘制

颜色说明
1.原色 – 没有被过度绘制 – 这部分的像素点只在屏幕上绘制了一次。
2.蓝色 – 1次过度绘制– 这部分的像素点只在屏幕上绘制了两次。
3.绿色 – 2次过度绘制 – 这部分的像素点只在屏幕上绘制了三次。
4.粉色 – 3次过度绘制 – 这部分的像素点只在屏幕上绘制了四次。
5.红色 – 4次过度绘制 – 这部分的像素点只在屏幕上绘制了五次。

ps:「开发者选项」里面的「显示GPU视图更新」也是个好东西。
比如可以用来观察别人的代码是调用了 RecyclerView 的 notifyItemChanged() 还是 notifyDataSetChanged()
pps:「开发者选项」里面的「显示布局边界」也是个好东西。
可以用来观察 Android 的某个页面是H5还是原生的。



2.Hierarchy View

在这里插入图片描述
很直观的展示了布局层级结构。
所以遇到复杂的布局页面,多使用 RelativeLayout。不管用的话再考虑用 ConstraintLayout。减少布局层次妥妥的。

软件在Android studio下已经找不到打开路径了,目测已经被废弃了。这个软件在sdk的这个目录下打开,叫做monitor
在这里插入图片描述

ps:mac版本的monitor很坑,试了「jdk1.8.0_201.jdk」和「jdk1.8.0_211.jdk」都不行。网上找了一下解决方案,说只认「jdk1.8.0_144.jdk」。果然如此。我每次使用还得切换 java 环境!
在这里插入图片描述



3.Layout Inspector

在 Android studio 的 Tools 菜单栏下
在这里插入图片描述
老样子我们只需要观察 id/content 以下的布局就行。


解决办法

详细案例讲解是没有的,这懒我偷了。记录自己几条经验。
1.自定义 View 的 onDraw 方法里,减少在 onDraw 方法里新建对象,比如说 Paint 对象。把能从变量抽取成属性的对象都抽取了。
2.onDraw 方法里的 clipPath 和 clipRect 这一套要会用。
3.遇到复杂的布局页面,多使用 RelativeLayout。不管用的话再考虑用 ConstraintLayout。
4.考虑使用 merge 替代 include
5.考虑 ViewStub
6.布局背景要尽量少设置,比如Fragment已经设置了background了,Activity就可以考虑不用设置了。
7.学习使用 AsyncLayoutInflater

发布了32 篇原创文章 · 获赞 36 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/alcoholdi/article/details/89666919