1. Launcher 调用startActivity
Launcher 向AMS请求创建根Activity
调用startActivitySafely,里面调用Instrumentation的execStartActivity方法,最终通过ASM的代理类调用AMS的startActivity。
2. AMS 向Zygote请求创建进程
AMS判断根Activity是否存在并启动,不存在就会向Zygote进程请求创建应用程序进程
3. Zygote fork 进程
创建应用程序进程通过动态代理的方式去调用ActivityThread.main()
4. ActivityThread main()
Zygote进程里通过动态代理的方式去调用
4.1启动主Looper
Looper.prepareMainLooper();
4.2. ActivityThread attach:
- 获取ActivityManagerService的代理对象IActivityManager
- 通过代理对象调用attachApplication(),获取启动application所需信息(应用进程相关数据)
- 执行Application的attach方法,里面执行attachBaseContext绑定Context
4.3. installContentProviders
启动ContentProviders
4.4. Application onCreate
- Application创建完毕
- ActivityThread 进入loop循环