Android性能优化(二)App布局优化


布局优化的通用套路
调试GPU过度绘制,将Overdraw降低到合理范围内
设置——开发者选项——调试GPU过度绘制——显示过度绘制区域。
在实际项目中,一般认为蓝色即是可以接受的颜色。
总结
卡顿原因:16毫秒机制
16 毫秒的时间主要被两件事情所占用
第一件:将 UI 对象转换为一系列多边形和纹理( GPU处理的数据)
第二件: CPU 传递处理数据到 GPU 。
所以很明显,我们要缩短 这两部分的时间,也就是说需要尽量减少对象转换的次数,以及上 传数据的次数
如何减少这两部分的时间 以至于在 16ms 完成呢
CPU 减少 xml 转换成对象的时间(主要是xml解析,位置,大小等逻辑运算)
解决方法:减少布局嵌套层数,使用Hierarchy Viewer 有分枝 不能优化,没有分枝可以去掉嵌套;不能打开 浪费我20分钟时间
使用merge标签,可以减少嵌套层数(只能用于根布局),UiAutoMatorViewer工具查看布局纵深及绘制时间
使用include标签 ,可以减少cpu打包资源文件的时间,因为如果每个页面都有一个相同的布局,cpu还是会把所有的页面里的这个布局打包到GPU进行绘制。如果用include 只需要把这个布局缓存到gpu 即可。
GPU 减少重复绘制的时间(主要是背景色)
使用GPU配置渲染工具,定位出问题发生在具体哪个步骤,生成trace文件,使用TraceView精准定位代码;
什么是重复绘制:
  1. 自定义控件中 onDraw中做了过多绘制
  2. 另外小知识:安卓7.0 之前调用重绘 invalidate() onmear()onlayout ondraw ()三个方法会顺序执行,7.0之后重绘的话只会调用ondraw;原因是7.0之后把自定义控件的纹理(GPU处理的数据)缓存到cpu,当颜色发生变化,GPU会自动进行计算改变,也就是只走ondraw(),但当位置发生变化的时候才会依次走以上三个流程。
  3. 布局层次太深,嵌套太多,导致一个地方绘制很多次.。 注意:主题背景也会绘制一次,必要时候去掉; 对于图片 设置透明的颜色 就不会过度绘制了
  4. ViewStub延迟初始化。ViewStub是轻量级且不可见的视图,它没有大小,没有绘制功能,也不参与measure和layout,资源消耗非常低。App里常见的视图如蒙层、小红点,以及网络错误、没有数据等公共视图,使用频率并不高,如果每一次都参与绘制其实是浪费资源的,都可以借助ViewStub标签进行延迟初始化,仅当使用时才去初始化。懒加载,随用随加载,inflat
参考:





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值