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