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.

相關文章
相關標籤/搜索