Android应用启动耗时分析

本文详细介绍了Android应用的冷启动、暖启动和热启动三种情况,重点关注冷启动的三个关键步骤:创建APP进程、渲染首帧及接受用户交互。通过日志和adb命令分析启动耗时,并提及了系统工具如AS的Profiler进行精细化分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android应用启动分为三种情况:
  • 冷启动
  • 暖启动
  • 热启动

以上三种方式从上到下依次启动耗时会减少。接下来一一讲解

冷启动

冷启动会出现在系统启动后或应用被系统kill掉后,首次启动应用,冷启动包括三个大步骤:

  1. 启动APP,创建APP进程
  2. 创建主线程,渲染第一帧画面
  3. 将启动时创建的空白window替换为绘制好的activity,开始接受用户交互

每一步中执行的具体操作如下:

1. 启动APP,创建APP进程
  • 加载和启动APP
  • 显示一个空白的window
  • 创建APP进程
2. 创建主线程,渲染第一帧画面
  • 创建APP对象
  • 启动主线程
  • 创建MainActivity
  • inflate页面的view
  • 布局首屏
  • 执行首次绘制
3. 使用上一步绘制完成的首屏替换第1步显示的空白window,开始接收用户的交互事件
热启动

热启动是耗时最少的启动方式,这种方式发生在应用进程退后台后,重新被用户唤起。此时内存中依旧保存着应用进程,因此系统只需要将应用进程从后台调至前台,无需做各种初始化、inflate、layout和渲染等等操作。

暖启动

暖启动的耗时介于以上两者之间,这种启动方式发生在以下可能情况:

  • 用户退出应用后,系统依旧缓存这应用进程,没有回收,此时用户重新启动应用,此时无需再次创建进程,但依旧要创建activity,重走生命周期方法。
  • 系统因内存紧张,回收了退居后台的原因进程,然后用户返回到该应用,此时应用需要重新创建进程和activity,但可以使用保留的数据对activity进行初始化。
启动耗时查看
  1. 冷启动耗时可以通过日志查看,在应用启动时,系统会打印一行名为 Displayed 的耗时日志,如下
ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms

以上便是应用启动到第一帧画面绘制完毕的耗时。
注意这是系统日志,不是应用日志,因此如果是在AS中查看,需要选这No Filters。
有时候会带有total,如下

ActivityManager: Displayed com.android.myexample/.StartupTiming: +3s534ms (total +1m22s643ms)

出现此种情况是因为启动时不只加载了一个activity,比如还有splash页,如上前一个时间是最后一个activity加载耗时,total是从启动到当前页加载完成耗时

  1. 可以使用adb命令查看
adb [-d|-e|-s <serialNumber>] shell am start -S -W
com.example.app/.MainActivity
-c android.intent.category.LAUNCHER
-a android.intent.action.MAIN

如上 -c -a可选,启动后会在终端输出如下时间:

Starting: Intent
Activity: com.example.app/.MainActivity
ThisTime: 2044
TotalTime: 2044
WaitTime: 2054
Complete

其中ThisTime表示最后一个activity启动耗时,TotalTime表示所有activity启动耗时,WaitTime是AMS启动activity的总耗时。通常情况下,三者的关系如下

ThisTime <= TotalTime <= WaitTime

更细化的耗时分析则需要使用工具进行分析,官方有给出相应的工具进行分析,如AS的Profiler、TraceView或者Systrace等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值