`

Flex 组件 生命周期

    博客分类:
  • Flex
 
阅读更多

 

 

1、生命周期简述

(1) Construction 调用组件构造函数。(无参Construction

 

(2) Get Set 设置组件属性,常在set方法内监控一个布尔变量实现失效机制

 

(3) 调用addChild方法将组件添加到父容器中。Flex将自动调

creationChildren(),invaliteProperties(),invalidateSize(),invalidateDisplayList()。只有将组件添加到父容器中,Flex才能确定它的size,设置它所继承style属性。

 

(4) 组件的parent属性设置为对父容器的引用。

 

(5)   Style setting

 

(6) 组件分发preinitialize事件

 

(7) 调用组件creationChildren()方法

 

(8) 调用invaliteProperties (),invalidateSize (),invalidateDisplayList ()失效方法,Flex将在下一个render event期间对相应的commitProperties(),measure(),updateDisplayList()方法进行调用。这个规则唯一例外就是当用户设置组件的heightwidth属性时,Flex不会调用measure方法。也就是说只有当组件的explicitWidthexplicitHeight属性时NaNFlex才会调用measure方法。

 

(9) 组件分发initialize事件。此时组件所有子组件初始化完毕,但组件尚未更改size和布局,可以利用这个事件在组件布局之前执行一些附加的处理。

 

(10) 在父容器上分发childAdd事件

(11) 在父容器上分发initialize事件

 

(12) 在下一个render eventFlex执行以下动作:

a.  调用组件的commitProperties方法

b.  调用组件的measure方法

c.  调用组件的layoutChrome方法

d.  调用组件的UpdateDisplayList方法

e.  在组件上分发updateComplete事件

 

(13) 如果commitPropertiesmeasureupdateDisplayList方法调用了invalidatePropertiesinvalidateSizeinvalidateDisplayList方法,则Flex会分发另一个render事件

 

(14) 在最后的render event发生后,Flex执行以下动作

a.  设置组件visible属性使其可视

b.  组件分发creationComplete事件,组件sizelayout被确定,这个事件在组件创建时分发一次

c.  组件分发updateComplete事件,无论什么时候,只要组件的layoutpositionsize或其他可视的attribute发生变化就会分发这事件,然后更新组件来正确的显示。

 

2、 为什么使用失效机制(invalidation mechanism

 

(1)当设置了组件的多个属性后,比如buttonlabelicon 属性,我们需要所有属性被设置后一次性执行commitpropertiesmeasureupdateDisplayList方法,而不是设置过label属性后执行一遍这些方法,然后再设置icon属性后又执行一次这些方法。

 

(2)几个组件同时更改了他们的字体大小。程序更改字体大小的执行速度远远快于Flex更新应用的速度,因此要在确定最终更改字体之后才开始更新布局。另外,Flex需要协调布局操作以消除任何冗余过程,而不是在每个组件更新它的字体大小之后都执行一次布局操作。

 

Flex使用失效机制来同步组件的更改。Flex用一系列方法的使用,比如在setter方法内监控一个变更变量来标记组件的某些东西已经发生变化,然后在下一个renderevent中触发组件的commitpropertiesmeasurelayoutChromupdateDisplayList检查这些布尔变量来完成最终的变更逻辑。这样做得额外好处就是setter方法可以更迅速的返回,把对新属性值的处理留给了commitProperties方法。

失效方法及其对应的触发函数如下:

InvalidateProperties通知组件,以使下次屏幕更新时,调用commitproperties

invalidateSize通知组件,以使下次屏幕更更新时,调用measure

invalidateDisplayList通知组件,以使下次屏幕更新时,调用layoutChromUpdateDisplayList

当组件调用一个失效方法时,它就通知Flex该组件已经被更新。当多个组件调用失效方法时,Flex会在schedules中协调这些更新,以使这些更新操作在下一次屏幕更新时一起执行。注意,creationChildren没有对应的失效方法,它会在调用后被立即执行

 

 

 

flex组件的生命周期总体可以分为三个阶段:初始、更新、销毁阶段

 

一。初始阶段

 

  • Construction
  • Construction是组件构造阶段。在构造函数中可以添加事件监听器,初始化属性。

  • Configuration
  • Configuration是组件的配置阶段,组件的属性,事件回调函数,样式和效果定义都在这个阶段完成。不应该把这些任务推迟到Attachment和Initlization阶段之后。

  • Attachment
  • Attachment阶段是把该组件追加到显示列表当中,一个Flex组件会被一个Flex容器IContianer以addChild方法添加到显示列表当中。

  • Initlization
  • 在Initlization初始化阶段,组件会执行一次完整的invalidation/validation周期。这个阶段做的工作流程是:

    • 发出preinitialize事件。
    • 执行方法createChildren()
    • 发出initialize事件。
    • 行一次完整的invalidation/validation周期。
    • 发出creationComplete事件。

     

    二。更新阶段

     

    用户可能会与组件产生交互,组件的位置大小可能改变,样式可能被重新赋值,也可能获得焦点或者被禁用等等。这些情况的发生都用影响到组件外观的变化。所以组件需要重绘自身来响应这些变化。

  • Invalidation
  • 如果一个组件的属性改变,它可能就会标记组件为失效状态。

  • Validation
  • 一个组件被标记失效后,会验证是否需要更新组件,如果需要会调用相关的方法来更新。组件有三个极其重要的方法来更新自己:

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

    除了这三个方法,还有一个重要的方法是styleChanged(styleName),当某个样式改变时,styleChanged被调用,然后执行Invalidation标记组件。如果你有自定义一个组件,有一些法则必要得遵守:

    不要在子类中显式调用commitProperties,measure和updateDisplayList这三个方法,你要做的是override,而不是call。如果你添加了新的样式,同样是要继承styleChanged方法,加入自己的逻辑。

     

    三。销毁阶段

     

  • Detachment
  • 当不需要这个组件时,把它从显示列表中移出。把组件从一个容器中移出再添加到另一个容器中比创建新的组件有更小的开销。

  • Garbage Collection
  • 如果组件不再被引用时,它就成为符合垃圾回收的对象了,所以垃圾回收的第一条准则是不再有活动的引用。
    更加值得注意的是第二条准则,即不包含使用了强引用的事件监听器,Dictionary和Timer。
    所以尽量使用弱引用是多么重要,但是同样,小心你的弱引用在不该回收的时刻被回收了。例如对函数中的临时变量使用弱引用,你可能得不到你想要的异步结果。

     

    分享到:
    评论

    相关推荐

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

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

      深入FLEX组件生命周期

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

      Flex组件生命周期[收集].pdf

      Flex组件生命周期是软件开发中关于Adobe Flex框架的重要概念,它涉及到UIComponent的创建、初始化、显示和销毁等各个阶段。Flex应用的根对象是SystemManager,这是一个Display Class,继承自flash.display.MovieClip...

      flex 4 生命周期

      Flex 4生命周期是Adobe Flex框架的核心组成部分,它详细规定了组件从创建到销毁的过程。在Flex 3到Flex 4的进化中,生命周期有了显著的变化,这些变化旨在提高性能、可扩展性和稳定性。 Flex框架的生命周期包括了...

      flex 不错的教程

      首先,Flex组件生命周期(Flex Component Lifecycle)是指Flex框架用来创建和更新UI元素在Flash显示列表上的一系列方法和事件。当开发者编写自定义组件时,理解Flex组件生命周期是非常有益的。在组件生命周期的不同...

      导出Flex组件为jpg图片

      这个过程通常涉及一些编程技巧,包括对Flex组件生命周期的理解,以及对ActionScript(Flash Player的编程语言)的熟练掌握。 标签“源码”意味着可能在博文中会有实际的代码示例来展示如何操作。“工具”可能指的是...

      flex3_4 lifecycle

      首先,让我们了解一下Flex组件生命周期的基本概念。每个Flex组件都有一个从创建到销毁的过程,这个过程被称为组件生命周期。它包括几个关键阶段,如初始化、测量、布局、绘制以及事件处理等。这些阶段确保了组件正确...

      Flex4 Life cycle

      5. **事件处理**:Flex组件生命周期中,事件处理是非常关键的一环。组件可以监听并响应各种事件,例如用户输入、数据变化等。事件处理通常发生在`enterFrame`事件期间,这是处理动画和实时交互的理想时机。 6. **...

      Flex轮弹组件

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

      flex3组件和框架的生命周期

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

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

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

      Flex 组件Flex 组件Flex 组件

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

      Flex3组件和框架的生命周期

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

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

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

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

      #### 组件生命周期阶段概述 - **构造阶段**:组件对象被创建。 - **添加阶段**:组件被添加到显示列表中。 - **初始化阶段**:组件进行必要的初始化工作。 - **失效机制阶段**:组件的状态可能改变,例如响应用户...

      Flex_API的架构图

      这些组件是基于DisplayObject和EventDispatcher类的层次结构构建的,它们遵循Flex组件生命周期,具有创建、初始化、显示、交互和销毁等阶段。 5. **Flex Event Model**: 事件模型是Flex API的重要特性,允许组件...

      Flex 自定义组件ImageViewer

      组件生命周期是每个Flex组件从创建到销毁所经历的一系列阶段。理解组件生命周期至关重要,因为它涉及到组件何时初始化、何时准备显示、何时接收用户输入以及何时被销毁。以下是一些关键的生命周期方法: 1. **...

      Flex个人知识库之Apple组件

      7. Flex组件生命周期:从初始化到销毁的各个阶段,理解这些可以帮助优化组件性能和内存管理。 8. 触摸事件和手势识别:在Apple设备上,理解和处理触摸事件是关键,因为它们不同于传统的鼠标事件。 通过研究"flexlib...

    Global site tag (gtag.js) - Google Analytics