初始性能优化及工具 | 青训营笔记

72 阅读4分钟

这是我参与「第四届青训营 」笔记创作活动的第7天

一、为什么做性能优化

在移动端进行性能优化可以改善体验从而帮助业务指标的提升。

从更长的时间看,硬件性能提升速度变缓,ARM平台收益于架构和工艺的演进,最近几年趋势比X86平台好。从更长的时间范围来看,多核带来的提升取决于可以真正并执行的部分。

为什么做性能优化

在优化前如果滑动时会出现丢帧的情况,优化后会减少丢帧,看起来感观更好。

二、性能优化是什么

性能优化的目标是:启动滑动页面加载速度更快、更稳不出现闪退、更省资源(例如占用空间大小,有些用户没有足够的空间,用户内存不够)功耗流量。

流畅性优化

首先需要了解Android的线程结构,有一个主线程流程,需要寻找可以影响主线程(UI线程)的地方(系统事件、输入事件、应用事件应用启动关闭、定时事件)。

界面是不断的刷新,UI线程的事件回调,绘制动作时间短更流程

卡顿的原因:输入事件没有及时响应、输入事件有太多逻辑要处理耗时长、出现丢帧的情况

解决卡顿:把耗时操作移动到其他线程,保证主线程不丢帧,整体流畅连贯。

资源优化

资源:即Android手机的软件和硬件资源,通俗意义上应用依赖的移动终端的有限资源和系统设置的数值,即低功耗、存储、流量、系统参数、CPU、内存等。

利用有效的资源达到更好的效果

有哪些资源类优化:内存(Memory)、电量和功耗(Battery)、数据(流量)

端侧资源:功耗、内存、存储、CPU、GPU、网络、音量

服务侧资源:CDN带宽、API流量

稳定性优化

ANR是应用程序无响应。如果Android应用的界面线程处于阻塞状态的时间过长,会触发APP ANR错误。如果应用位于前台,系统会向用户显示一个对话框,ANR对话框会为用户提供强行退出应用或等待的选项。

三、最佳性能工具选型

性能监控价值

  • 监控和优化相生相伴
  • 监控有攻有防
  • 攻是为了发现有问题,指导优化方向
  • 防是为了发现劣化问题,及时止损
  • 线上监控发现问题并聚合排序,线下监控作为线上辅助,并发版前置发现问题

GPU呈现模式

原理:系统通过记录每一帧的相关数据,通过图形的形式呈现

优点:无需二次开发,简单易用

缺点:并不完全准确,且无法明确指出造成卡顿问题的具体原因

Layertool

原理:通过遍历ViewTree信息,输出View层级关系

优点:清楚明了,可以宏观感知ViewTree现状,也可以定制,帮助分析overdraw

缺点:还不能够清楚明确的分析出UI的性能瓶颈

CPU Profiler

原理:基于JVMTI

优点:完整的方法调用栈输出、支持Java、C、C++方法耗时检测,上手简单

缺点:性能损耗太大

TraceView

Instrument:虚拟监听函数入口回调;耗时点:读时间、写数据到buffer、加锁等指令。

Sample:通过定时抓取多次堆栈diff,近似确定函数的进入和退出时间;耗时点:堆栈diff、同Instrument。

Battery Historian

电脑安装Battery Historian,然后电脑上分析Bugreport;手机充电的100%或者reset batterystats,手机上执行测试应用,然后抓取bugreport

四、如何做性能优化

现状分析

耗时成因:CPU Time(循环、反射、序列化/反序列化、类解析)、IO Wait(IO操作,等待IO返回结果)、IPC(Binder调用耗时)、Lock Wait(主线程是等锁状态,等待其他线程或自己超时唤醒)、CPU Schedule(主线程是可执行状态,但是获取不到CPU时间片)。

运行环境归因:根据耗时成因归类;根据运行所在线程环境采用不同的策略。

渲染分析:一些动画回调、输入处理、测量、布局等