1、冷启动与热启动简介
冷启动:当启动应用时,后台没有该应用的进程,这时系统会重新创建一个新的进程分配给该应用,这个启动方式就是冷启动。
热启动:当启动应用时,后台已有该应用的进程(例:按back键、home键,应用虽然会退出,但是该应用的进程是依然会保留在后台,可进入任务列表查看),所以在已有进程的情况下,这种启动会从已有的进程中来启动应用,这个方式叫热启动。
两者之间的特点如下:
- 冷启动:系统会重新创建一个新的进程分配给该应用,从Application创建到UI绘制等相关流程都会执行一次。
- 热启动:应用还在后台,因此该启动方式不会重建Application,只会重新绘制UI等相关流程。
冷启动流程分析:
- 创建进程:启动APP、加载空白Window、创建进程
- 启动应用:创建Application、启动ActivityThread、创建Activity
- 开启绘制
2、计算启动时间
Activity启动事件计算指令(适用于线下):
1 | adb shell am start -W [packageName]/[packageName.XxxActivity] |
输出参数:
1 | Status: ok |
1、ThisTime:一般和TotalTime时间一样。除非在应用启动时开了一个透明的Activity预先处理一些事再显示出主Activity,这样将比TotalTime小。
2、TotalTime:应用的启动时间。包含创建进程+Application初始化+Activity初始化到界面显示。
3、WaitTime:一般比TotalTime大点,包含系统影响的耗时。
TraceView(可埋点)
1 | Debug.startMethodTracing("simple.trace"); |
文件目录 Android/data/包名/files
优化
通过设置在window空白时添加主题
1 | <activity |
1 | <style name="Splash" parent="AppTheme"> |
在 HelloActivity 的Activity方法之前重新设置回原主题。