冷启动:当启动应用时,后台没有该应用的进程(常见如:进程被杀、首次启动等),这时系统会重新创建一个新的进程分配给该应用。
热启动:App进程存在,并且Activity对象仍然存在内存中没有被回收。可以重复避免对象初始化,布局解析绘制。
场景就类似你打开微信聊了一会天这时候出去看了下日历在打开微信微信这时候启动就属于热启动。
在冷启动开始时,系统有三个任务。这三个任务是:
1.创建应用进程。
2.加载并启动应用。
3.在启动后立即显示应用的空白启动窗口然后显示Activity。
应用进程就负责后续阶段:
在Android Studio Logcat中过滤关键字“Displayed”,可以看到对应的冷启动耗时日志。
使用adb shell获取应用的启动时间
// 其中的AppstartActivity全路径可以省略前面的packageName
adb shell am start -W [packageName]/[AppstartActivity全路径]
执行后会得到三个时间:ThisTime、TotalTime和WaitTime,详情如下:
表示最后一个Activity启动耗时。
表示所有Activity启动耗时。
表示AMS启动Activity的总耗时。
一般来说,只需查看得到的TotalTime,即应用的启动时间,其包括 创建进程 + Application初始化 + Activity初始化到界面显示 的过程。
整个冷启动流程中至少有两处onCreate,分别是Application和Activity,onCreate中尽量避免做过多的初始化动作,如果必须,那么考虑IntentService
将确实是退出的逻辑替换为按Home键,将冷启动做成热启动的假象。