一、App启动有三种,冷启动、热启动、温启动。
1、冷启动(耗时最多,衡量标准),冷启动之前(系统行为),有三个任务,启动App,加载空白的Window,创建进程。随后的任务(可以干涉)创建Application、启动主线程、创建MainActivity、加载布局、布置屏幕、首帧绘制 。
以下是冷启动的过程图:
Click Event 用户点击桌面图标的一个操作,从而触发IPC操作。Process.start() 进程的创建。ActivityThread 是进程的主入口,进行消息和Handler的创建。bindApplication 通过反射创建 Application 已经调用相关的生命周期。LiftCycle 是Activity的生命周期。ViewRootImpl 进行进行界面的绘制。
2、热启动
后台切换到前台的一个过程
3、温启动
只会重新走Activit的生命周期,不会创建Application。
二、启动时间的测试方法:
1、使用adb命令进行
adb shell am start -W com.MyTest.dmoe / com.MyTest.dmoe.MainActivity
TotalTime:所有Activity启动耗时
WaitTime:AMS启动Activity的总耗时
2、日志打印:
在Application的attachBaseContext中打印:LaunchTimer.startRecord();
在绘制第一条UI打印结束,如果是列表,则监听:
view.getViewTreeObserver().addOnPreDrawListener(new
ViewTreeObserver.OnPreDrawListener(){
@Override
public boolean onPreDraw() {
view.getViewTreeObserver().removeOnPreDrawListener(this);
LaunchTimer.endRecord();
return true;
}
});