这是我参与「第四届青训营 」笔记创作活动的第7天
为什么做性能优化
从更长的时间范围来看:
- 硬件性能提升速度变缓
- ARM平台受益于架构和工艺的演进,最近几年趋势比X86平 台好
- 多核带来的提升取决于可以真正执行的部分
性能优化是什么
-目标:快、稳、省
流畅性优化
- Android的线程结构
- 界面刷新
- 卡顿感的产生
- 如何解决卡顿
资源优化
资源: 即Android手机的软件和硬件资源通俗意义上应用依赖的移动终端的有限资源和系统设置的数值,即功耗、存储、流量、系统参数、CPU、内存等。
Android端能做的资源优化
稳定性优化
ANR: 应用程序无响应。如果 Android 应用的界面线程处于阻塞状态的时间过长,会触发App ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR 对话框会为用户提供强行退出应用或等待的选项。
系统级优化
最佳工具选型
- CPU呈现模式
原理:系统通过记录每一帧的相关数据,然后通过图形的形式呈现
优点:无需二次开发,简单易用
缺点:并不完全准确,且无法明确指出造成卡顿问题的具体原因 - Layertool
原理:通过遍历ViewTree信息,输出View层级关系
优点:清楚明了,可以宏观感知ViewTree现状,也可以定制,帮助分析 overdraw
缺点:还不能够清楚明确的分析出UI的性能瓶颈 - CPU Profiler
原理:基于JVMTI
优点:完整的方法调用栈输出、支持Java、C、C++方法耗时检测、上手简单
缺点:性能损耗太大 - TraceView
- Instrument
虚拟监听函数入口回调, Enter/Exit/Unwind 耗时点:读时间、写数据到buffer、加锁等指令 - Sample
通过定时抓取多次堆栈diff,近似确定函数的进入和退出时间 耗时点:堆栈diff、同Instrument间隔抓取堆栈的时间越长性能损耗越少,而越会导致短函数检测不到
- Systrace
- ftrace: debugfs采集和读取trace数据,记录trace events
2.atrace:用户侧的trace跟踪,聚合所有的trace event - 系统级的Trace数据:锁监控 等
今日学习总结
今天我认识到了不同进行性能优化的工具以及它们的区别,这使我受益匪浅。
注
所有图片均来自课程PPT