新聞中心
本文向大家簡單介紹一下Flex組件生命周期,使用set,get設(shè)置Flex組件屬性,常在set方法內(nèi)監(jiān)控一個布爾變量來實現(xiàn)失效機制。

創(chuàng)新互聯(lián)建站于2013年開始,先為江門等服務(wù)建站,江門等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為江門企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
深入學(xué)習(xí)Flex組件生命周期
1、生命周期(LifeCycle)簡述
⑴調(diào)用Flex組件構(gòu)造函數(shù)。構(gòu)造函數(shù)沒有返回類型,沒有參數(shù),使用super()調(diào)用父類的構(gòu)造器
⑵使用set,get設(shè)置Flex組件屬性,常在set方法內(nèi)監(jiān)控一個布爾變量來實現(xiàn)失效機制
⑶調(diào)用addChild()方法將Flex組件添加到父Flex組件顯示列表中,F(xiàn)LEX將自動調(diào)用createChildren(),invalidateProperties(),invalidateSize(),invalidateDisplayList()。只有將Flex組件添加到父容器中,F(xiàn)LEX才能確定它的大小(size),設(shè)置它所繼承樣式(style)屬性,或者在屏幕上畫出它
⑷Flex組件的parent屬性設(shè)置為對父容器的引用
⑸樣式(style)設(shè)置
⑹Flex組件分發(fā)preinitialize事件
⑺調(diào)用Flex組件createChildren()方法
⑻調(diào)用invalidateProperties(),invalidateSize(),invalidateDisplayList()失效方法,F(xiàn)LEX將在下一個“渲染事件”(renderevent)期間對相應(yīng)的commitProperties(),measure(),updateDisplayList()方法進行調(diào)用。這個規(guī)則唯一例外就是當(dāng)用戶設(shè)置Flex組件的height和width屬性時,Flex不會調(diào)用measure()方法。也就是說,只有當(dāng)Flex組件的explicitWidth和explicitHeight屬性是NaN時Flex才會調(diào)用measure()方法。
⑼Flex組件分發(fā)initialize事件。此時Flex組件所有的子Flex組件初始化完成,但Flex組件尚未更改size和布局,可以利用這個事件在Flex組件布局之前執(zhí)行一些附加的處理
⑽在父容器上分發(fā)childAdd事件
⑾在父容器上分發(fā)initialize事件
⑿在下一個“渲染事件”(renderevent)中,Flex執(zhí)行以下動作:
a.調(diào)用Flex組件的commitProperties()方法
b.調(diào)用Flex組件的measure()方法
c.調(diào)用Flex組件的layoutChrome()方法
d.調(diào)用Flex組件的updateDisplayList()方法
e.在Flex組件上分發(fā)updateComplete事件
⒀如果commitProperties(),measure(),updateDisplayList()方法調(diào)用了invalidateProperties(),invalidateSize(),invalidateDisplayList()方法,則Flexh會分發(fā)另外一個render事件
⒁在最后的render事件發(fā)生后,Flex執(zhí)行以下動作:
a.設(shè)置Flex組件visible屬性使其可視
b.Flex組件分發(fā)creationComplete事件,F(xiàn)lex組件的大小(size)和布局被確定,這個事件只在Flex組件創(chuàng)建時分發(fā)一次
c.Flex組件分發(fā)updateComplete事件。無論什么時候,只要Flex組件的布局(layout),位置,大小或其它可視的屬性發(fā)生變化就會分發(fā)這事件,然后更新Flex組件來正確地顯示。
2、為什么使用失效機制(invalidationmechanism)
一種情況是,當(dāng)設(shè)置了Flex組件的多個屬性后,比如Button控件的label和icon屬性,我們需要所有屬性被設(shè)置后一次性執(zhí)行commitProperties(),measure(),updateDisplayList()方法,而不是設(shè)置過label屬性后執(zhí)行一遍這些方法,然后在設(shè)置icon屬性后又執(zhí)行一次這些方法。
另一種情況是幾個Flex組件同時更改了它們的字體大小。程序更改字體大小的執(zhí)行速度大大快于Flex更新應(yīng)用的速度,因此要在確定最終更改字體之后才開始更新布局。另外,F(xiàn)lex需要協(xié)調(diào)布局操作以消除任何冗余過程,而不是在每個Flex組件更新它的字體大小之后都執(zhí)行一次布局操作。
Flex使用“失效機制(invalidationmechanism)”來同步Flex組件的更改。Flex用一系列方法的調(diào)用,比如在setter方法內(nèi)監(jiān)控一個變更變量來標(biāo)記Flex組件的某些東西已經(jīng)發(fā)生變化,然后在下一個“渲染事件(renderevent)”中觸發(fā)Flex組件的commitProperties(),measure(),layoutChrome(),updateDisplayList()檢查這些布爾變量來完成最終的變更邏輯。這樣做的額外好處就是setter方法可以更迅速地返回,把對新屬性值的處理留給了commitProperties()方法。
失效方法及其對應(yīng)的觸發(fā)函數(shù)如下:
invalidateProperties()通知Flex組件,以使下次屏幕更新時,它的commitProperties()方法被調(diào)用。
invalidateSize()通知Flex組件,以使下次屏幕更新時,它的measure()方法被調(diào)用。
invalidateDisplayList()通知Flex組件,以使下次屏幕更新時它的layoutChrome()方法和
updateDisplayList()方法能被調(diào)用。
當(dāng)Flex組件調(diào)用一個“失效”方法時,它就通知Flex該Flex組件已經(jīng)被更新。當(dāng)多個Flex組件調(diào)用失效
方法,F(xiàn)lex會在schedules中協(xié)調(diào)這些更新,以使這些更新操作在下一次屏幕更新時一起執(zhí)行。注意,createChildren()沒有對應(yīng)的失效方法,它會在調(diào)用后被立即執(zhí)行。
新聞標(biāo)題:深入學(xué)習(xí)Flex組件生命周期
網(wǎng)頁網(wǎng)址:http://www.dlmjj.cn/article/dhpjcsc.html


咨詢
建站咨詢
