深入FLEX元件生命週期

2021-08-30 03:05:15 字數 3081 閱讀 1144

1、生命週期(lifecycle

)簡述⑴呼叫元件建構函式。建構函式沒有返回型別,沒有引數,使用super()

呼叫父類的構造器

⑵使用set,get

設定元件屬性,常在set

方法內監控乙個布林變數來實現失效機制

⑶呼叫addchild()

方法將元件新增到父元件顯示列表中,flex

將自動呼叫createchildren()

,invalidateproperties()

,invalidatesize()

,invalidatedisplaylist()

。只有將元件新增到父容器中,flex

才能確定它的大小(size)

,設定它所繼承樣式(style)

屬性,或者在螢幕上畫出它

⑷元件的parent 

屬性設定為對父容器的引用

⑸樣式(style)

設定⑹元件分發preinitialize

事件⑺呼叫元件createchildren()

方法⑻呼叫invalidateproperties()

,invalidatesize()

,invalidatedisplaylist()

失效方法,flex

將在下乙個「渲染事件」(render event)

期間對相應的commitproperties()

,measure()

,updatedisplaylist()

方法進行呼叫。這個規則唯一例外就是當使用者設定元件的height 

和width 

屬性時, flex 

不會呼叫measure()

方法。也就是說,只有當元件的explicitwidth 

和explicitheight 

屬性是nan 

時flex

才會呼叫measure()

方法。⑼元件分發initialize

事件。此時元件所有的子元件初始化完成,但元件尚未更改size

和布局,可以利用這個事件在元件布局之前執行一些附加的處理

⑽在父容器上分發childadd

事件⑾在父容器上分發initialize

事件⑿在下乙個「渲染事件」(render event)

中, flex 

執行以下動作:

a.呼叫元件的commitproperties()

方法b.

呼叫元件的measure()

方法c.

呼叫元件的layoutchrome()

方法d.

呼叫元件的updatedisplaylist()

方法e.

在元件上分發updatecomplete

事件⒀如果commitproperties()

,measure()

,updatedisplaylist()

方法呼叫了invalidateproperties()

,invalidatesize()

,invalidatedisplaylist()

方法,則flexh 

會分發另外乙個render

事件⒁在最後的render

事件發生後, flex

執行以下動作:

a.設定元件visible

屬性使其可視

b.元件分發creationcomplete

事件,元件的大小(size)

和布局被確定,這個事件只在元件建立時分發一次

c.元件分發updatecomplete

事件。無論什麼時候,只要元件的布局(layout)

,位置,大小或其它可視的屬性發生變化就會分發這事件,然後更新元件來正確地顯示。

2、為什麼使用失效機制(invalidation mechanism)

一種情況是,當設定了元件的多個屬性後,比如button 

控制項的label 

和icon 

屬性,我們需要所有屬性被設定後一次性執行commitproperties(), measure(), updatedisplaylist()

方法,而不是設定過label 

屬性後執行一遍這些方法,然後在設定icon

屬性後又執行一次這些方法。

另一種情況是幾個元件同時更改了它們的字型大小。程式更改字型大小的執行速度大大快於flex 

更新應用的速度,因此要在確定最終更改字型之後才開始更新布局。另外,flex 

需要協調布局操作以消除任何冗餘過程,而不是在每個元件更新它的字型大小之後都執行一次布局操作。

flex 

使用「失效機制(invalidation mechanism

)」來同步元件的更改。flex 

用一系列方法的呼叫,比如在setter

方法內監控乙個變更變數來標記元件的某些東西已經發生變化,然後在下乙個「渲染事件(renderevent

)」中觸發元件的commitproperties(), measure(), layoutchrome()

,updatedisplaylist()

檢查這些布林變數來完成最終的變更邏輯。這樣做的額外好處就是setter

方法可以更迅速地返回,把對新屬性值的處理留給了commitproperties()

方法。失效方法及其對應的觸發函式如下:

invalidateproperties() 

通知元件,以使下次螢幕更新時,它的commitproperties()

方法被呼叫。

invalidatesize() 

通知元件,以使下次螢幕更新時,它的measure()

方法被呼叫。

invalidatedisplaylist() 

通知元件,以使下次螢幕更新時它的layoutchrome()

方法和updatedisplaylist()

方法能被呼叫。

當元件呼叫乙個「失效」方法時,它就通知flex

該元件已經被更新。當多個元件呼叫失效

方法,flex 

會在schedules

中協調這些更新,以使這些更新操作在下一次螢幕更新時一起執行。注意,createchildren()

沒有對應的失效方法,它會在呼叫後被立即執行。

深入學習Flex元件生命週期

生命週期 lifecycle 簡述 呼叫flex元件建構函式。建構函式沒有返回型別,沒有引數,使用super 呼叫父類的構造器 使用set,get設定flex元件屬性,常在set方法內監控乙個布林變數來實現失效機制 呼叫addchild 方法將flex元件新增到父flex元件顯示列表中,flex將自...

元件生命週期

三大階段 失效階段,提交階段,度量階段 失效階段 對元件屬性setter函式中,若有發生改變,則標記屬性失效,為了防止多次呼叫setter而導致頻繁更改屬性,所以呼叫屬性失效函式,當當前ui存放進 layoutmannger的失效佇列中,並新增layoutmannger的延遲偵聽,在下一幀才進行相應...

元件生命週期

元件生命週期指的是元件從建立到銷毀的過程,在這個過程中的一些不同的階段,vue會呼叫指定的一些元件方法 基本生命週期函式有下面幾個階段 每乙個階段都對應著 之前 和 之後 兩個函式 beforecreate 初始化階段,應用不多 created 在例項建立完成後被立即呼叫,該階段完成了對data中的...