Flex組件生命週期

1. Intiliazition
Construction

Construction是組件構造階段,組件的構造器不能有必須的參數。在構造函數中可以添加事件監聽器,初始化屬性。這個階段只做很少的事情。

Configuration

Configuration是組件的配置階段,組件的屬性,事件回調函數,樣式和效果定義都在這個階段完成。你不應該把這些任務推遲到Attachment和Initlization階段之後。

Attachment

Attachment階段是把該組件追加到顯示列表當中,一個Flex組件會被一個Flex容器IContianer以addChild方法添加到顯示列表當中。

Initlization

在Initlization初始化階段,組件會執行一次完整的invalidation/validation週期。這個階段做的工作流程是:

  • 發出preinitialize事件。
  • 執行方法createChildren()
  • 發出initialize事件。
  • 行一次完整的invalidation/validation週期。
  • 發出creationComplete事件。
2. Updating

用戶可能會與組件產生交互,組件的位置大小可能改變,樣式可能被重新賦值,也可能獲得焦點或者被禁用等等。這些情況的發生都用影響到組件外觀的變化。所以組件需要重繪自身來響應這些變化。

Invalidation

如果一個組件的屬性改變,它可能就會標記組件爲失效狀態。

Validation

一個組件被標記失效後,會驗證是否需要更新組件,如果需要會調用相關的方法來更新。組件有三個極其重要的方法來更新自己:

  • commitProperties()
  • measure()
  • updateDisplayList(unscaledWidth,unscaledHeight)

除了這三個方法,還有一個重要的方法是styleChanged(styleName),當某個樣式改變時,styleChanged被調用,然後執行Invalidation標記組件。如果你有自定義一個組件,有一些法則必要得遵守:

不要在子類中顯式調用commitProperties,measure和updateDisplayList這三個方法,你要做的是override,而不是call。如果你添加了新的樣式,同樣是要繼承styleChanged方法,加入自己的邏輯。

3. Destruction
Detachment

當不需要這個組件時,把它從顯示列表中移出。把組件從一個容器中移出再添加到另一個容器中比創建新的組件有更小的開銷。

Garbage Collection

如果組件不再被引用時,它就成爲符合垃圾回收的對象了,所以垃圾回收的第一條準則是不再有活動的引用。
更加值得注意的是第二條準則,即不包含使用了強引用的事件監聽器,Dictionary和Timer。
所以儘量使用弱引用是多麼重要,但是同樣,小心你的弱引用在不該回收的時刻被回收了。例如對函數中的臨時變量使用弱引用,你可能得不到你想要的異步結果。

轉自:http://www.blogjava.net/charles/archive/2009/07/05/285578.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章