一、为什么要做性能优化
性能优化带来给用户体验的改善,进而可以帮助业务指标的提升。
从更长远的时间范围来看:
- 硬件性能提升速度变缓。
- ARM平台收益于架构和工艺的演进,最近几年趋势比X86平台号。
- 多核带来的提升取决于可以真正并行执行的部分。
未来:
- 未来会有新的材料和工艺来驱动芯片性能的进一步提升,但是目前还没有成熟。
- 移动处理器还受到电池技术的限制。
- 软件的性能优化仍可持续带来提升。
二、性能优化是什么?(有哪些优化方向,可以优化什么)
性能优化的目标是:快、稳、省。
流畅性优化:
首先了解Android的线程结构:
界面是如何刷新的?
卡顿感知如何产生?
如何解决卡顿?
将耗时操作放到其他线程去执行(异步)
资源优化
资源:即Android手机的软件和硬件资源,通俗意义上指应用依赖的移动终端的有限资源和系统设置的数值,即功耗、存储、流量、系统参数、CPU、内存等。 Android端能做哪些资源类优化?
稳定性优化
系统级优化
移动操作系统和硬件厂商的性能优化
性能优化工具选型
1.GPU呈现模式
原理:系统通过记录每一帧的相关数据,然后通过图形的形式呈现。
优点:无需二次开发,简单易用。
缺点:并不完全准确,无法明确的指出造成卡顿问题的具体原因。
2.Layertool
原理:通过遍历ViewTree信息,输出View层级关系。
优点:清楚明了,可以宏观感知ViewTree现状帮助分析overdraw
缺点:还不能够清楚明确的分析出UI的性能瓶颈。
3.CPU Profiler
原理:基于JVMTI。
优点:完整的方法调用栈输出、支持Java、C、C++方法耗时检测,上手简单。
缺点:性能损耗太大。
耗时分析
- CPU Time 循环、反射、序列化/反序列化,类解析
- IO Wait IO操作,等待IO返回结果。
- IPC BInder调用耗时。
- Lock Wait 主线程是等锁状态,等待其他线程或者自己超时唤醒
- CPU Schedule 主线程是可执行状态,但是获取不到CPU时间片。