启动优化

218 阅读1分钟

一、冷启动耗时分析

启动应用之前需要杀掉应用进程,方式有两种:

先获取权限:adb root

方式1:

  • 先过滤到应用的pid
  • adb shell ps -A | grep [包名]
  • adb shell kill [pid]

方式2:

adb shell pkill [含包名字段]

PS: 如果应用进程是自启的,可以使用adb shell am force-stop [包名],强制杀!

二、命令获取时间

  • 操作步骤一

  • adb shell am start -S -W [包名]/[包名.对应的Activity]

  • 执行命令结果如下: ThisTime:对应Activity启动耗时 TotalTime:应用自身启动耗时 = ThisTime + 应用Application等资源启动时间 WaitTime:系统启动应用耗时 = TotalTime + 系统资源启动时间

三、手动打点

  • 开始埋点:在应用Application的attachBaseContext()里调用
  • 结束埋点:在启动的Activity的layout.getViewTreeObserver().addOnDrawListener{ }的回调方法里面调用
  • 代码如下:
object LaunchTimer {
   var sTime = 0L
   // 在应用Application的attachBaseContext()里调用
   @JvmStatic
   fun startRecord() {
       sTime = System.currentTimeMillis()
   }
   
   // 在启动的Activity的layout.getViewTreeObserver().addOnDrawListener{ }的回调方法里面调用
   @JvmStatic
   fun endRecord() {
       var costTime = System.currentTimeMillis() - sTime
   }
}

PS:

  • 从Android 4.4开始,可以从Log分析出应用的某个Activity到界面所花费的时间。
  • 关键字:AcctivityManager: Displayed
  • ActivityManager: Displayed [包名]/.XxxActivity: +520ms 这个时间和 上面的方式二命令adb启动分析的TotalTime一致

四、Systrace文件分析

juejin.cn/post/705262…