什么是冷启动
- 冷启动/热启动的区别
冷启动:在启动应用前,系统中没有该应用的任何进程信息
热启动:用户使用返回键退出应用,然后马上又重新启动应用。进程保留在后台,从已有进程启动App。热启动不会走Application。
- 冷启动时间的计算
这个时间值从应用启动(创建进程)开始计算,到完成视图的第一次绘制(即Activity内容对用户可见)为止。
冷启动流程
- Zygote进程中fork创建出一个新的进程
- 创建和初始化Application类、创建MainActivity类、inflate布局
- 当走完onCreate、onStart、onResume走完后,contentView的measure、layout、draw显示到界面上
冷启动时间
- 安装adb
- adb shell am start -w packagename/activity
例如:adb shell am start -W im.zhangyu.poster/im.zhangyu.poster.SplashActivity
- 回到手机主屏,在Android Studio Terminal中输入命令,即可拉起app并输出启动时间
D:\AndroidProject\ZebraPoster>adb shell am start -W im.zhangyu.poster/im.zhangyu.poster.SplashActivity
Starting: Intent {
act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] cmp=im.zebra.poster/.SplashActivity }
Status: ok
LaunchState: COLD
Activity: im.zhangyu.poster/im.zhangyu.store.activity.StoreActivity
TotalTime: 1017
WaitTime: 1022
Complete
如何对冷启动的时间进行优化
- 尽量减少Application和MainActivity的onCreate方法的工作量
例如一些三方库的的初始化工作,可以使用懒加载,在需要的时候在进行初始化。
- 不要让Application参与业务的操作
- 不要在Application进行耗时操做
- 减少页面的布局深度。