Android View 简析

基于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.

相关文章
相关标签/搜索