1. Launcher 接收到点击事件,获取应用的信息,向 SystemServer(ActivityManagerService 简称AMS 运行在里面) 发起启动应用的请求。
2. SystemServer(AMS) 请求 Launcher Pause (Launcher 需要保存状态进入后台)
3. Launcher Pause , 向 SystemServer(AMS) 发送 Pause 完毕
4. SystemServer(AMS) 向 Zygote 请求启动一个新进程(calculator)
5. Zygote fork 出新进程(calculator) , 在新进程中执行 ActivityThread 类的 main 方法
将ApplicationThread attach 到 AMS,AMS调用bindApplication(AMS调用ActivityThread是通过ApplicationThreadProxy对象,而ActivityThread调用AMS的方法却是ActivityManagerProxy)
6. Handler接收消息后调用handleBindApplication,创建Application并启动
7. 在bindApplication后,AMS调用继续请求ActivityThread启动Activity
8. ActivityThread调用Activity attach创建PhoneWindow,关联WindowManager
9. 之后执行Activity onCreate ,onStart, onResume 回调
onCreate中setContentView时,依次创建DecorView、把系统一个LinearLayout添加到DecorView,这个LinearLayout包含顶部栏和一个id是android.R.id.content的ContentLayout。把setContentView传进来的布局添加到ContentLayout里
回调onResume
10. 调用WindowMnager.addView添加DecorView,addView操作还会创建ViewRootImpl,并把ViewRootImpl和DecorView关联
ViewRootImpl调用requestLayout把内容绘制到Surface上。ViewRootImpl在构造时创建一个Window,这个Window是一个Binder,调用WindowManagerService把Window添加显示到屏幕上(还需细分)