Activity
我们知道 Android 系统启动后已经启动了 Zygote,ServiceManager,SystemServer 等系统进程;ServiceManager 进程中完成了 Binder 初始化;SystemServer 进程中 ActivityManagerService,WindowManagerService,PackageManagerService 等系统服务在 ServiceManager 中已经注册;最后启动了 Launcher 桌面应用。
onCreate
这一步主要涉及WindowManagerService
Activity在oncreate的时候会新建一个PhoneWindow 对象。在 Android 中,Window 是个抽象的概念, Android 中 Window 的具体实现类是 PhoneWindow,Activity 和 Dialog 中的 Window 对象都是 PhoneWindow。
同时得到一个 WindowManager 对象,WindowManager 是一个抽象类,这个 WindowManager 的具体实现是在 WindowManagerImpl 中,对比 Context 和 ContextImpl。
每个 Activity 会有一个 WindowManager 对象,这个 mWindowManager 就是和 WindowManagerService 进行通信,也是 WindowManagerService 识别 View 具体属于哪个 Activity 的关键,创建时传入 IBinder 类型的 mToken。
mWindow.setWindowManager(..., mToken, ..., ...)
这个 mToken 是一个 IBinder,WindowManagerService 就是通过这个 IBinder 来管理 Activity 里的 View。
回调 Activity.onCreate() 后,会执行 setContentView() 方法将我们写的 Layout 布局页面设置给 Activity。
onResume
简单来说,onResume的过程就是先获取之前oncreate的时候,设置在activity中的phoneWindow,然后拿到这个window中的decorView(就是setContentView设置进去的东西?)。将decorView通过windowManager的addView方法将这个decorView添加进去。
windowManager的实现是windowManagerImpl,而windowManagerImpl又会调用windowManagerGlobal的addView函数。
最终的最终,windowManagerGlobal使用IWindowSession这个对象通过binder与system_server通信,完成view的add