应用启动的优化措施
2024-01-21 / 龙之叶   

前言

对于应用启动到底合不合格,除了固定的指标之外,还有一点就是跟对比机之间进行测试对比,看有没有差距。如果不达标或者跟对比机有差距,那就要对应用启动进行优化。
对于性能差距的分析,需要抓取traces查看两台机器之间是否有区别。

对比

抓取traces后,不仅要跟对比机进行对比,也要跟正常的traces进行对比,发现是哪个环节出了问题,究竟是哪一个流程比正常的慢。

Running State

对于正在运行的CPU,我们要从以下几个维度去分析

  • CPU的频率是否正常,有没有添加限制或者跟对比机相同。
  • CPU的架构跟对比机是否一样,有的CPU会因为架构的原因对机器本身的性能产生了限制,例如KI7的A88CPU是6小核2大核,它在其他所有条件都相同的情况下一定跑不过4大核4小核的机器。
  • 如果CPU性能和架构都差不多,那就要看CPU上是否任务过重,把有些优先级没那么重要的线程延后或者放到小核去做。
  • DDR频率是否一样
  • Android版本的差距

如上图所示,这是淘宝启动的时候CPU的变化,频率在启动的时候直接被拉满,并且淘宝有关的线程大多都放在了大核上去做。

Runnable State

可运行的CPU上面,我们可以看这几个差距

  • 首先看线程的设定,有没有被其他线程抢占优先级,可以先对线程优先级进行调整
  • 可以查看有没有其他较为空闲的CPU,如果有的话可以调整上去
  • 如果还是不行,就要查看CPU有没有异常背景导致任务过重找问题优化线程

CPU Loading计算: Totals time/(Selection extent timeOnline CPU Number)100%
如果CPU Loading>85%,基本确认有loading 重的嫌疑

在了解了这些后,优化应用启动的时间主要依据下面几点

  1. 提高CPU频率
  2. 提高DDR频率
  3. 拉长CPU和DDR提频时长
  4. 在可以减少动画播放的地方关闭动画
  5. 在应用安装的时候进行预编译,减少启动时长
  6. 在app白名单内专门进行配置
  7. 将启动时用到的线程跑在大核
  8. 在启动时尽量不使用网络IO

冷启动与热启动

冷启动耗时统计
adb 命令统计
adb命令 : adb shell am start -S -W 包名/启动类的全限定名 , -S 表示重启当前应用

  1. 在第①个时间段内,AMS 创建 ActivityRecord 记录块和选择合理的 Task、将当前Resume 的Activity 进行 pause.
  2. 在第②个时间段内,启动进程、调用无界面 Activity 的 onCreate() 等、 pause/finish 无界面的Activity.
  3. 在第③个时间段内,调用有界面 Activity 的 onCreate、onResum

如果需要统计从点击桌面图标到 Activity 启动完毕,可以用WaitTime作为标准。

本文链接:
http://longzhiye.top/2024/01/21/2024-01-21/