性能优化之过度绘制

性能优化之过度绘制

过度绘制监测:

打开开发者选项的 显示过度绘制

  • 原色:没有过度绘制
  • 蓝色:1 次过度绘制
  • 绿色:2 次过度绘制
  • 粉色:3 次过度绘制
  • 红色:4 次及以上过度绘制

优化策略:

1 若你的界面有自己的背景覆盖了全屏,则可以去除Activity自带的背景色

<style name="AppTheme" parent="android:Theme.Light.NoTitleBar">
    <item name="android:windowBackground">@null</item>
</style>

或者

getWindow().setBackgroundDrawable(null);

2 ImageView的background和imageDrawable重叠
ImageView的background设置了默认背景图
而 加载图片时 仍然会绘制这个背景图

解决: 把背景图和真正加载的图片都通过imageDrawable方法进行设置


3 限制 view的绘制区域
通过clipRect和clipPath方法 限制view的绘制区域
避免不必要的区域的绘制


4 使用 merge、include、ViewStub 标签进行布局优化

include设置layout=“xxx”进行布局设置
可以设置 长宽

ViewStub是惰性加载 用到的时候才加载布局

注意:要使用viewStub中的控件
不是用 viewStub.findxxx
而是直接 findxxx 并且要在 ViewStub加载后才可以
因为 ViewStub 加载了 ViewStub会移除自身 用相应的布局代替
所有的控件已经放到了 父布局里面了

使用 merge标签作根布局去除界面的多余层级
如 使用了 include标签 则可以用merge标签作根布局

实践: setVisibility会不会绘制
无论是 View.INVISIBLE 还是 View.GONE 都是不绘制的 也是不能被点击
但是 会调用 invalidate 因此
动态地inflation view性能要比SetVisiblity性能要好,当然ViewStub是最好的选择

猜你喜欢

转载自blog.csdn.net/weixin_37577039/article/details/80823072