这是我参与「第四届青训营」笔记创作活动的第7天
初识性能优化及工具
为什么做性能优化
性能优化带来体验的改善,进而帮助业务指标的提升
性能优化是什么
目标:快、稳、省资源,省空间
分类:
- 1.流畅性优化 快-极致的响应与流畅的体验
卡顿原因:
- 由于前面的代码响应导致滑动屏幕无效
- 响应了屏幕滑动,但是输入时间太长
- 其他原因导致丢帧 解决方法:尽可能将耗时线程移出主线程执行,让主线程只负责交互与刷新
- 2.资源优化 省-最小负载带来最大收益
- 3.稳定性优化 稳-稳定的实现,减少不必要打断
ANR:应用程序无响应 如果Android应用的界面线程处于阻塞状态的时间过长,会触发App ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR对话框会为用户提供强行退出应用或等待的选项。
- 4.系统级优化 扩展-底层booster
最佳性能工具选型
性能监控价值:
- 监控和优化相生相伴
- 监控有攻也有防
- 攻是为了发现现有问题,指导优化方向
- 防是为了发现劣化问题,及时止损
- 线上监控发现问题并聚合排序,线下监控作为线上辅助,并发版前置发现问题 GPU呈现模式
原理:系统通过记录每一帧的相关数据,然后通过图形的形式呈现,但并不完全准确且无法明确指出造成卡顿问题的具体原因
Layertool
原理:通过遍历ViewTree信息,输出View层级关系
VOU Profiler
原理:基于JVMTI,上手简单但性能损耗太大
TraceView
Instrument:虚拟监听函数入口回调 Sample:通过定时焯去多次堆栈diff,近似确定函数的进入和退出时间
Systrace
如何做性能优化
现状分析————耗时原因
- CPU Time:循环,反射,序列化/反序列化,类解析
- IO Wait:IO操作,等待IO返回结果
- IPC:Binder调用耗时
- Lock Wait:主线程是等锁状态,等待其他线程或者自己超时唤醒
- CPU Schedule:主线程是可执行状态,但是获取不到CPU时间片
现状分析————运行环境归因
- 根据耗时成因归类
- 根据运行所在线程环境采取不用的策略
现状分析————渲染分析
采用具体的策略优化
标题:初识性能优化及工具|青训营笔记