本文对Activity从启动到显示出来的流程做一个总结。
一般Activity是通过context.startActivity方法启动的,这个方法会触发ATMS启动Activity流程,在SystemServer创建相应的ActivityRecord对象。
接下来SystemServer会通过Activity生命周期调用流程去要Activity进入resume状态,并在此时执行StartingWindow显示流程,在app显示出来前先显示一个StartingWindow。
在app这边会通过Activity的启动流程创建Activity对象和PhoneWindow对象,通常在Activity的onCreate方法中调用setContentView方法后会创建DecorView对象。
在Activity执行onResume了后,会调用WindowManager.addView方法,执行View的添加流程,创建ViewRootImpl对象,并在SystemServer这边创建WindowState窗口对象。
安卓的窗口管理系统将所有的窗口相关对象都放到一个树的数据结构中管理,WindowState就是之前创建的ActivityRecord的一个子节点,详见WindowContainer结构。
接下来app通过View的Surface创建流程创建一个Surface准备绘图,同时也会通过SurfaceFlinger中Layer的创建流程在SurfaceFlinger中创建对应的Layer。
创建Surface的时候SystemServer还会执行窗口布局流程。
有了Surface后,app执行View的绘制流程进行绘图,安卓有一套HWUI绘制流程使用skia、opengl、vulkun等api进行绘图,并可以使用gpu进行硬件加速。
app在绘制完第一帧后会执行StartingWindow销毁流程,从而让StartingWindow消失。
绘图完成后Surface可以通过BufferQueue机制将绘制的图像传给SurfaceFlinger中对应的Layer,并通过SurfaceFlinger中Layer的合成流程将图像合成并显示到屏幕上。
本文详细解析了Android中Activity从启动到显示的过程,包括通过context.startActivity启动Activity、SystemServer创建ActivityRecord、执行StartingWindow显示流程、Activity生命周期回调、View添加流程、Surface创建及绘制流程、以及StartingWindow销毁流程。

被折叠的 条评论
为什么被折叠?



