浅谈Android性能优化

286 阅读2分钟

一、为什么要做性能优化

性能优化带来给用户体验的改善,进而可以帮助业务指标的提升。

从更长远的时间范围来看:

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

未来:

  • 未来会有新的材料和工艺来驱动芯片性能的进一步提升,但是目前还没有成熟。
  • 移动处理器还受到电池技术的限制。
  • 软件的性能优化仍可持续带来提升。

二、性能优化是什么?(有哪些优化方向,可以优化什么)

性能优化的目标是:快、稳、省。

流畅性优化:

首先了解Android的线程结构:

图片.png

界面是如何刷新的?

图片.png 卡顿感知如何产生?

图片.png 如何解决卡顿? 将耗时操作放到其他线程去执行(异步)

图片.png

资源优化

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

图片.png

稳定性优化

图片.png

系统级优化

移动操作系统和硬件厂商的性能优化

图片.png

图片.png

性能优化工具选型

1.GPU呈现模式

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

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

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

2.Layertool

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

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

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

3.CPU Profiler

原理:基于JVMTI。

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

缺点:性能损耗太大。

耗时分析

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