Android app启动过程

202 阅读1分钟

Instrumentation

在应用程序任何代码调用之前被实例化,它会构建Application,构建Activity,生命周期也通过这个对象去执行。

Launcher

系统桌面APP,放置APP快捷菜单。点击快捷图标调用startAppShortcutOrInfoActivity,获取app安装时保存的app信息,startActivity启动APP。

AMS

通过AIDL调用AMS的startActivity方法,如果进程不存在,则调用startProcess创建应用进程。

启动主线程

进程入口,ActivityThread(主线程)的main方法。

Looper.prepareMainLooper();
ActivityThread thread = new ActivityThread();(实例化)
thread.attach(false, startSeq);
//跨进程调用AMS attachApplication方法,跨进程调用ActivityThread.bindApplication方法创建Application
Looper.loop();

ActivityThread.bindApplication Handler发送sendMessage BIND_APPLICATION消息,处理该msg消息时,构建ContextImpl,Instrumentation,Application。最后调用了Application的onCreate方法。

创建Activity

ActivityThread发送EXECUTE_TRANSACTION消息。调用ActivityThread的handleLaunchActivity方法,用ClassLoader类加载器创建Activity,实例化PhoneWindow,走其他Activity的生命周期。

简单流程。 Launcher->AMS->ActivityThread