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组件的生命周期是Adobe Flex框架中一个至关重要的概念,它涉及到UIComponent类及其子类(如Button、Canvas等)在创建、初始化、显示和销毁过程...对于深入学习Flex组件生命周期,这份资料将是一份宝贵的参考资料。
尽管Adobe提供了详尽的文档,但开发者往往需要通过实践和探索来深入理解Flex框架的细微之处。由于框架的复杂性和不断演变,开发者必须保持学习和适应,以实现最佳的开发实践。 总之,掌握Flex 4生命周期对于构建...
在深入理解 Flex3 的组件和框架生命周期之前,我们需要先了解 Flex 的历史背景以及其运行机制。 Flex 简史: Flex 的发展始于2004年,最初由 Macromedia 开发,后来被 Adobe 收购。Flex3 是一个关键版本,引入了更...
- **构造阶段(birth)**:这是组件生命周期的起点。在此阶段,组件被实例化,并且执行构造函数。此时组件还不存在于视图中,因此无法进行任何视觉上的操作。 - **添加阶段(birth)**:组件被添加到视图中,但尚未...
### 理解Flex3组件和框架的生命周期 #### 简介 Adobe Flex 是一款强大的框架,用于构建丰富的互联网应用程序 (RIA)。虽然 Adobe 提供了大量的文档支持,但理解和掌握 Flex 组件及其框架的生命周期仍然是一个挑战。...
每个Flex组件都是一个继承自UIComponent的类,拥有自己的生命周期、样式和事件处理机制。例如,Button组件用于响应用户的点击动作,Label组件用于显示静态文本,而List组件则可以展示可选择的项目列表。 Flex组件的...
- **Flex3组件生命周期** - 构造阶段 - 添加阶段 - 初始化阶段 - 失效机制阶段 - 生效机制阶段 - 更新阶段 - 移除阶段 - **Flex应用程序生命周期** - 构造阶段 - 初始化阶段 - 预加载阶段 - 子类创建阶段...
学习和理解Flex的组件生命周期以及如何创建自定义组件,可以帮助开发者更有效地构建具有复杂交互和行为的应用程序。通过深入研究ImageViewer组件的实现,我们可以掌握如何在Flex中处理图像展示、交互和性能优化等...
当开发者编写自定义组件时,理解Flex组件生命周期是非常有益的。在组件生命周期的不同阶段,Flex框架会调用特定的方法,开发者可以在这个周期中使用这些方法来执行自定义逻辑。 Flex的生命周期主要分为以下几个阶段...
#### 三、理解Flex4组件生命周期 在Flex4中,理解组件的生命周期对于自定义组件的开发至关重要。Flex4中的组件生命周期主要分为三个阶段:诞生(Birth)、生命期(Life)和死亡(Death)。这些阶段涉及不同的事件...
在理解Flex4组件生命周期方面,学习者会了解到组件从创建到销毁的各个阶段,包括初始化、测量、布局、绘制和更新。掌握这些生命周期方法对于优化性能和处理用户交互至关重要。例如,`createChildren()` 方法用于创建...
标签“源码”提示我们,这篇博客可能深入到Flex组件生命周期的源码层面,解释了各个方法的实现细节。通过阅读源码,开发者可以更深入地理解Flex的工作原理,从而优化代码性能和组件设计。 至于“工具”标签,可能...
3. Flex组件生命周期:从创建到销毁的过程,包括初始化、测量、布局、绘制等阶段。 4. Event-driven编程:Flex应用主要依赖事件驱动模型,轮弹组件会监听并响应用户的滚动操作。 5. 组件状态管理:了解组件在不同...
1. **组件设计模式**:Coverflow组件是基于Flex的组件模型设计的,这包括MXML和ActionScript的结合使用,以及组件生命周期的理解(如initialize、creationComplete等事件)。 2. **3D效果实现**:在Flex中,可以...
通过查看Flex组件的源码,我们可以深入理解这些生命周期方法是如何工作的。例如,自定义组件可以通过覆盖`createChildren()`、`initialize()`、`measure()`、`layout()`、`updateDisplayList()`等方法来定制组件的...