基于android 4.4上源码分析:android
setContentView流程:源码分析
getwindow() ->setContentView() -> installDecor() -> addView()orm
getWindow()返回的是PhoneWindow递归
installDecor()生成了window的rootView decorViewget
addView() 会致使 decorView -> requestLayout() -> getViewRootImpl() -> performTraversals()源码
performTravsals()里面工做流程就是递归的作:工作流
measure() -> layout() -> draw()form
measure()对于不一样ViewGroup的类型测量过程不同(Framelayout、LinearLayout、RelativeLayout等)rsa
FrameLayout 只要对全部的子View测量一篇,测量的速度是最快的request
LinearLayout也是只要对全部的子View测量一篇,可是当有Weight属性时须要从新对最大宽度或者高度从新进行一次测量
因此写Layout时 指定layout_width="0dp"或者layout_height="0dp"能够减小测量时间
RelativeLayout须要对子view进行一次横向测量和纵向测量。测量速度最慢,尤为是层次结构比较深时。
layout()基本是肯定各个view在画布坐标。
draw()生成displaylist给GPU生成图像。
对于有多个子View的ViewGroup,都是先从最下面那个子view(index:0)开始进行measure ,layout ,draw.