app启动性能分析

app启动性能分析

  app启动流程:

    Application OnCreate

      加载第三方SDK

    Activity  OnCreate

      加载自身逻辑

      发送远程数据请求 xxx.json

        渲染界面List

 

  app性能指标:

    冷启动:系统没有该应用的进程,需要创建一个新的进程分配给应用,所以会先创建和初始化Application类,再创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上。(建议时间5s)

    暖启动:复用一些数据,再restart(建议时间2s)

    热启动:从已有的进程中来启动,不会创建和初始化Application类,直接创建和初始化MainActivity类(包括一系列的测量、布局、绘制),最后显示在界面上(建议时间1.5s)

    首屏启动:加载首屏广告的启动

  测试主要流程:

    adb logcat:只能计算首屏启动之前的时间,计算activtity,MainActivity加载的时间是多少

    录屏+视频拆帧:最准确,但是需要人工分析,耗时长

    uiautomator等自动化工具每隔200ms巡视界面变化

    traceview:Android一个分析工具

    硬埋点:要求开发人员在启动之前埋点,app启动之后结束埋点,然后把数据回传到服务器,最准确  

    用得最多的是 adb logcat + 录屏+视频拆帧

  使用adb logcat

  • package=com.xxx.android
  • 清理缓存数据:adb shell pm clear $package
  • 停止进程:adb shell am force-stop $package
  • 启动app:adb shell am start -S -W $package/.view.WelcomeActivityAlias(-S等待app启动完成)
  • 获取数据:adb logcat |grep -i displayed

  adb logcat结果

    startTime:记录刚准备调用startActivityAndWait()的时间点

    endTime:记录startActivityAndWait()函数调用返回的时间点

    WaitTime:startActivityAndWait()调用耗时,WaitTime=endTime-startTime

 使用ffmpeg拆帧

  • adb shell am force-stop $package
  • adb shell screenrecord --bugreport  --time-limit 30 /data/local/tmp/myapp.mp4 &
  • adb shell am start -S -W $package/.view.WelcomeActivityAlias  
  • wait
  • adb pull /data/local/tmp/myapp.mp4 (把视频拉到本地)
  • ffmpeg -i myapp.mp4 myapp.gif
  • ffmpeg -i myapp.mp4 -r 10 frames_%03d.jpg
posted @ 2020-09-15 10:40  lagjaflgjfl  阅读(138)  评论(0)    收藏  举报