Posts Tagged Life Cycle

Flex组件生命周期

flex组件从创建到销毁经历7个状态,这些阶段又可以分成四个阶段(出生、发育、成熟、死亡)

出生

构造(Constructio):

初始化flex组件对象,例如下面的代码,其所做的动作包括分配内存空间等等,构造会很快的完成,不需要对组件布局,没有风格设置,没有孩子被添加,不会参与到display list。

var button:Button = new Button();

添加(Addition):

parent.addChild(button);

组件创建出来,被添加父容器,程序将依次调用addingChild(), $addChild(), childAdded()。

addingChild: 这一步的执行也不是很重,所做的工作包括设置孩子的parent引用以及设置document引用,定义布局管理对象,设置字体,开始样式准备和样式管理

$addChild: 是flashPlayer的低级别的函数,所做的工作是将该组件添加到flash player 的display list

childAdded: 完成添加工作,派发child添加完成的事件,如果此时还没有完成对组件的初始化,则程序进入“初始化阶段”,也就是调用initialize()方法

初始化(Initialization):

程序以此调用:createChildren()/childrenCreated()/initializeAccessibility()/initializationComplete(),比如创建一个按钮,其自身包括一个文本框组件,这个文本框就是在createChildren()中被添加。

发育和成熟:

发育

无效和生效周期提供了一个分离的过程,使属性的设置和属性变化后的处理过程相分离,这种分离的设计可以保证重的处理被推迟执行,避免不必要的运算。

无效(Invalidation):

无效组件包括三种,无效属性,无效大小,无效显示列表(invalidateProperties/size/displayList),三个函数分别在组件属性变化,大小变化,绘制变化时调用。调用无效后,组件并不会立即重新绘制,而是三种没有先后关系,可以单独调用,也可以一起调用,比如按钮设置button.enabled = false,就会调用invalidateProperties();和invalidateDisplayList();,但不需要调用invalidateSize()因为这个属性变化不会影响按钮的大小。

生效(Validation):

组件无效后并不会立即生效,而是在RENDER 事件时才会生效,与无效的三个方法(invalidateProperties/size/displayList)对应的是commit property, measure, update display list,外加layout chrome方法
生效的调用是按顺序的,这样可以保证数据的正确性。

成熟

更新(Update):

组件从无效的生效的转还过程就是更新的阶段,这也是flex组件生命周期最主要的阶段。

死亡

移除(Removal):

移除通常就是从父节点上删除或者是这个组件的父容器的父容器被删除,以此类推。通常是在parent.removeChild(button)之后。

参阅:

http://flexcomps.wordpress.com/2008/05/09/flex-component-life-cycle/
http://www.developmentarc.com/site/sites/default/files/understanding_the_flex_3_lifecycle_v1.0.pdf