一.布局的加载
activity如何加载布局 setContentView(xml);
setContentView();

1️⃣调用activity的setContentView();


3️⃣phoneWindow是Window(抽象类)的唯一实现类

4️⃣最终调用PhoneWindow类里面的setContentView();




布局资源


最后返回的是content帧布局 所有的xml布局都是放在这个FramLayout里面



二.绘制流程
在PhoneWindow的setContentView方法中调用了ViewGroup的addView()

看invalidate(true);


ViewGroup里面的do...while循环一直找到DecorView

调用ViewRootImpl中的invalidateChildInParent();



调用doTraversals();


performTraversals()做了三件事情
- performMeasure(childWidthMeasureSpec, childHeightMeasureSpec);测量

调用view的 measure()

2.performLayout(lp, desiredWindowWidth, desiredWindowHeight);布局


3.performDraw();绘制

