startActivity后,经过ActivityStarter,ActivityStack,ActivityStackSuperior,AMS等组件。
最终到达ActivityThread。其中有ApplicationThread发消息,H处理消息。
handleLaunchActivity中会调用到handleResumeActivity,
其中会执行WindowManagerImpl.addView
new ViewRootImpl(...)(建立session),ViewRootImpl.setView
requestLayout,向WMS发送显示Window的请求
requestLayout中
1.获取Surface
2.performMeasure,等同于父View的MeasureSpec(或Window尺寸)+子View的LayoutParams=子View的MeasureSpec
(注意wrap_content)
3.performLayout
View.layout(...)就是把这样一个View放到相对于父View的位置,layout自身还调用了onLayout,如果这个View自身是一个ViewGroup,可以复写onLayout去写定位自己child的逻辑。
4.performDraw
(注意父控件默认不绘制)
performDraw中分GPU,CPU绘制
CPU中Surface.lock->Decor.draw->Surface.unlock
再细讲draw的DisplayList的构建
每个View在一开始申请一个Canvas,然后把绘制指令交给DisplayList中,在结束的时候交给RenderNode来管理
最终会整合到DecorView中,再整合到ThreadedRenderer
最后对DisplayList进行渲染