`

深入理解FLEX组件生命周期[转]

    博客分类:
  • Flex
 
阅读更多

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组件生命周期

    ### 深入理解FLEX组件生命周期 #### 一、引言 在FLEX开发过程中,深入了解组件的生命周期对于优化应用程序性能、确保组件正确响应用户交互至关重要。本文将详细解析Flex组件生命周期的主要阶段:初始化...

    【完美翻译】Flex组件的生命周期

    Flex组件的生命周期是Adobe Flex框架中一个至关重要的概念,它涉及到UIComponent类及其子类(如Button、Canvas等)在创建、初始化、显示和销毁过程...对于深入学习Flex组件生命周期,这份资料将是一份宝贵的参考资料。

    flex 4 生命周期

    尽管Adobe提供了详尽的文档,但开发者往往需要通过实践和探索来深入理解Flex框架的细微之处。由于框架的复杂性和不断演变,开发者必须保持学习和适应,以实现最佳的开发实践。 总之,掌握Flex 4生命周期对于构建...

    Flex 组件Flex 组件Flex 组件

    每个Flex组件都是一个继承自UIComponent的类,拥有自己的生命周期、样式和事件处理机制。例如,Button组件用于响应用户的点击动作,Label组件用于显示静态文本,而List组件则可以展示可选择的项目列表。 Flex组件的...

    理解Flex3的组件和框架的生命周期.doc

    在深入理解 Flex3 的组件和框架生命周期之前,我们需要先了解 Flex 的历史背景以及其运行机制。 Flex 简史: Flex 的发展始于2004年,最初由 Macromedia 开发,后来被 Adobe 收购。Flex3 是一个关键版本,引入了更...

    理解Flex3的组件和框架的生命周期

    - **构造阶段(birth)**:这是组件生命周期的起点。在此阶段,组件被实例化,并且执行构造函数。此时组件还不存在于视图中,因此无法进行任何视觉上的操作。 - **添加阶段(birth)**:组件被添加到视图中,但尚未...

    理解Flex3组件和框架的生命周期.pdf

    ### 理解Flex3组件和框架的生命周期 #### 简介 Adobe Flex 是一款强大的框架,用于构建丰富的互联网应用程序 (RIA)。虽然 Adobe 提供了大量的文档支持,但理解和掌握 Flex 组件及其框架的生命周期仍然是一个挑战。...

    Flex3组件和框架的生命周期

    - **Flex3组件生命周期** - 构造阶段 - 添加阶段 - 初始化阶段 - 失效机制阶段 - 生效机制阶段 - 更新阶段 - 移除阶段 - **Flex应用程序生命周期** - 构造阶段 - 初始化阶段 - 预加载阶段 - 子类创建阶段...

    Flex 自定义组件ImageViewer

    学习和理解Flex的组件生命周期以及如何创建自定义组件,可以帮助开发者更有效地构建具有复杂交互和行为的应用程序。通过深入研究ImageViewer组件的实现,我们可以掌握如何在Flex中处理图像展示、交互和性能优化等...

    flex 不错的教程

    当开发者编写自定义组件时,理解Flex组件生命周期是非常有益的。在组件生命周期的不同阶段,Flex框架会调用特定的方法,开发者可以在这个周期中使用这些方法来执行自定义逻辑。 Flex的生命周期主要分为以下几个阶段...

    Flex4自定义组件开发.pdf

    #### 三、理解Flex4组件生命周期 在Flex4中,理解组件的生命周期对于自定义组件的开发至关重要。Flex4中的组件生命周期主要分为三个阶段:诞生(Birth)、生命期(Life)和死亡(Death)。这些阶段涉及不同的事件...

    精讲Flex4组件开发(附源码)

    在理解Flex4组件生命周期方面,学习者会了解到组件从创建到销毁的各个阶段,包括初始化、测量、布局、绘制和更新。掌握这些生命周期方法对于优化性能和处理用户交互至关重要。例如,`createChildren()` 方法用于创建...

    flex3_4 lifecycle

    标签“源码”提示我们,这篇博客可能深入到Flex组件生命周期的源码层面,解释了各个方法的实现细节。通过阅读源码,开发者可以更深入地理解Flex的工作原理,从而优化代码性能和组件设计。 至于“工具”标签,可能...

    Flex轮弹组件

    3. Flex组件生命周期:从创建到销毁的过程,包括初始化、测量、布局、绘制等阶段。 4. Event-driven编程:Flex应用主要依赖事件驱动模型,轮弹组件会监听并响应用户的滚动操作。 5. 组件状态管理:了解组件在不同...

    flex 超炫组件 coverflow 组件源码

    1. **组件设计模式**:Coverflow组件是基于Flex的组件模型设计的,这包括MXML和ActionScript的结合使用,以及组件生命周期的理解(如initialize、creationComplete等事件)。 2. **3D效果实现**:在Flex中,可以...

    Flex4 Life cycle

    通过查看Flex组件的源码,我们可以深入理解这些生命周期方法是如何工作的。例如,自定义组件可以通过覆盖`createChildren()`、`initialize()`、`measure()`、`layout()`、`updateDisplayList()`等方法来定制组件的...

Global site tag (gtag.js) - Google Analytics