Adobe Flex 框架的SDK 美中不足之处就是部分由良好的半黑盒子系统所创建;这就是说, 在大多数情况下,我们这些开发者在项目周期中没有时间或精力去真正地深入到未知领域。 从技术上来讲,Flex 框架的不是一个黑盒子,你可以阅读和查看它的所有源码。由于代码 的复杂性及它是如何设计的,我们往往把框架看成是如何输入、得到什么样的输出。大多数 开发人员,包括作者,往往在工作中学习Flex,通过验证、试验、研究或按照他人写的博客 提到的观点来寻找新的技巧和技术。 Adobe 已经做了非常了不起的工作是Flex 框架的文档,它已被细分为两大类:用户指南和 API(ASDoc)文档。然而,即使他们有大量的文档,用户指南和API 文档之间的还是有一个 很大的差距。用户向导涵盖了一系列的课题,从如何开始到使用比较复杂的功能;但都停止 在这些不很复杂的功能上,比如:样式扩展的技巧,元数据可以做和不可以做的,当然也包 括Flex 框架和组件生命周期。有很高层次的概述,但这些都在用户能弄明白的能力范围之 外。 从API 文档中我们可以推断出很多功能和命令,有时它们是引导我们,但也有时关于一些信 息会戏弄我们。通常,API 文档假定你知道要查找的东西,它们只是解释一下如何去做;但 不会告诉你何时或为什么去用它们。由于这种宏观的指导与微观的API 之间的差距,优化开 发成为了一个黑色艺术,需要程序员通过多年的经验在试验和错误中确定最佳的做法。加上 这些与Flex 只有5 年左右的历史,它从最初的表现进化到了引人注目的阶段,而我们大多 处于技术的初级阶段。 然而,作为第三方的开发者,并不是唯一留在外面的。多数Adobe 的工程师也没有完全了 解框架的细微部分。詹姆斯参加了Adobe 2008 年MAX 会议关于Flex 组件的介绍和Deepa 论坛关于Flex 的生命周期评价。 她的报告一半是关于生命周期,甚至其中一半是关于在当前Flex3 的生命周期,其余的是关 于Flex4 的变化。 随着她在高层次的深入概述,提到近期一个Flex 架构师使她最终通过了整个生命周期。她 对观众说希望能早点了解这些信息,这样能使她能成为一个更好的工程师。 我们的观点是Flex 迷惑了我们许多人,甚至一些最受尊敬的工程师。这是一个复杂的系统 设计得非常强大,易扩展,灵活。然而,这种灵活性推展和实现创造了许多可能性。这些可 能性很多都不是最好的开发方式,甚至有可能不利于整体性能,稳定性和可扩展性的应用前 景。 本文的目的是尝试照耀到整个生命周期,使我们一些启示,作为一个开发社区,用Flex 能 创造更好的应用程序和组件。值得提醒的是,以下信息大部分是从阅读源代码推断的,一些 是好的文档,也有一些不是。如果你看到一些不太正确的,或许可以用一个更好的解决方式, 欢迎随时联络DevelopmentArc 我们(info ### 理解Flex3的组件和框架的生命周期 #### 一、引言 Adobe Flex 框架作为一款强大的富互联网应用开发工具,在其发展过程中展现出了卓越的技术能力和广泛的适用性。然而,正如文中所述,尽管 Flex 框架提供了详尽的文档资料,但在用户指南与 API 文档之间仍存在一定的信息断层。本文旨在深入探讨 Flex3 组件与框架的生命周期,以期帮助开发者更好地理解并利用这一框架。 #### 二、Flex 框架简史与生命周期概念 Flex 框架自 2004 年首次发布以来,经历了多次迭代升级,从最初的 Flex 1 到当前版本,其功能和性能有了显著提升。在 Flex3 中,组件和框架的生命周期管理变得更加复杂但也更加灵活。 生命周期是指一个对象从被创建到被销毁的过程中的各个状态。对于 Flex 组件而言,生命周期主要包括以下几个阶段: 1. **构造阶段** (birth): 组件被创建。 2. **初始化阶段** (birth): 组件完成基本配置。 3. **生效机制阶段** (growth/maturity): 组件准备就绪并响应事件。 4. **更新阶段** (maturity): 组件状态发生变化。 5. **移除阶段** (death): 组件从父容器中移除。 #### 三、组件生命周期详解 ##### 3.1 组件构造阶段 当一个组件被实例化时,即进入了构造阶段。这是生命周期的第一个阶段,主要任务是初始化组件的基本属性。在这个阶段,开发者可以通过构造函数进行必要的初始化操作。 **示例代码**: ```as public class MyComponent extends Component { public function MyComponent() { super(); // 初始化操作 } } ``` ##### 3.2 组件添加阶段 组件添加阶段发生在组件被添加到容器后。此时,Flex 框架会执行一系列操作来确保组件正确地嵌入到 UI 中。 **示例代码**: ```as public function addChild(child:DisplayObject):void { super.addChild(child); // 添加后的处理 } ``` ##### 3.3 组件初始化阶段 初始化阶段是在组件被添加到容器之后,但在其完全可见之前发生。这个阶段主要用于执行更复杂的初始化逻辑,例如设置事件监听器等。 **示例代码**: ```as public function init():void { // 初始化逻辑 } ``` ##### 3.4 失效机制阶段 失效机制阶段是组件生命周期中的一个重要环节。在这个阶段,组件可以接收事件,并且能够根据事件调整自身状态。此外,还可以在这个阶段实现动画效果等。 **示例代码**: ```as public function invalidateProperty(property:String):void { super.invalidateProperty(property); // 失效逻辑 } ``` ##### 3.5 更新阶段 更新阶段指的是组件状态发生变化后,框架重新绘制组件的过程。例如,当用户改变某个滑块的位置时,对应的组件需要更新其视觉表现。 **示例代码**: ```as public function updateDisplayList(unused:Number, advance:Number):void { super.updateDisplayList(unused, advance); // 更新显示列表 } ``` ##### 3.6 移除阶段 当组件不再需要时,会被从容器中移除,进入移除阶段。在这个阶段,可以清理资源或执行其他必要的清理工作。 **示例代码**: ```as public function removeChild(child:DisplayObject):void { super.removeChild(child); // 清理资源 } ``` #### 四、Flex 应用程序的生命周期 Flex 应用程序的生命周期涵盖了从创建到销毁的全过程,大致可以分为以下几个阶段: 1. **构造阶段** (construction) 2. **初始化阶段** (initialization) 3. **预加载阶段** (preload) 4. **子类创建阶段** (subclass creation) 5. **子类显示阶段** (subclass display) 6. **销毁阶段** (destruction) ##### 4.1 Flex 应用程序的构造阶段 在构造阶段,Flex 编译器会将 MXML 文件编译为 ActionScript 类,并实例化应用程序。这个过程涉及到 Flex 编译器的工作原理以及 SystemManager 的作用。 **示例代码**: ```as public class MyApplication extends Application { public function MyApplication() { super(); // 应用程序构造逻辑 } } ``` ##### 4.2 Flex 应用程序的初始化阶段 初始化阶段是应用程序启动后的第一个关键步骤。在这个阶段,Flex 框架会对应用程序进行初步的配置,并准备执行其他后续操作。 **示例代码**: ```as public function initialize():void { // 初始化逻辑 } ``` ##### 4.3 Flex 应用程序的预加载阶段 预加载阶段主要负责加载应用程序所需的资源,如图像、声音等。这个阶段对于提高用户体验非常重要。 **示例代码**: ```as public function preload():void { // 预加载资源 } ``` ##### 4.4 Flex 应用程序的子类创建阶段 在这个阶段,应用程序可以根据需要创建子组件或其他对象。这些子对象可以是用户界面元素,也可以是业务逻辑相关的类。 **示例代码**: ```as public function createChildren():void { super.createChildren(); // 创建子对象 } ``` ##### 4.5 Flex 应用程序的子类显示阶段 子类显示阶段是应用程序完全准备好显示给用户的时候。在这个阶段,所有必要的组件已经被创建并初始化完毕。 **示例代码**: ```as public function updateDisplayList(unused:Number, advance:Number):void { super.updateDisplayList(unused, advance); // 更新显示列表 } ``` ##### 4.6 Flex 应用程序的销毁阶段 当应用程序不再需要运行时,就会进入销毁阶段。在这个阶段,所有的资源都会被释放,以避免内存泄漏等问题。 **示例代码**: ```as public function dispose():void { // 销毁逻辑 } ``` #### 五、Flex 组件开发的最佳实践 为了充分利用 Flex 框架的强大功能,开发者需要遵循一些最佳实践原则。下面是一些建议: 1. **使用构造器** (Using Construction): 在构造器中进行必要的初始化操作。 2. **使用初始化** (Initialization): 在初始化方法中进行更复杂的初始化工作。 3. **使用失效‐生效的周期和方法** (Invalidation and Activation Cycle): 合理利用失效和生效机制,以提高性能。 4. **使用标识变量** (Marker Variables): 使用标志变量来跟踪组件的状态。 5. **实现验证的方法** (Validation Methods): 实现验证方法来检查组件的状态是否正确。 6. **使用和访问样式** (Styles): 正确使用样式属性来控制组件的外观。 #### 六、结论 理解和掌握 Flex3 组件与框架的生命周期对于高效地开发高质量的 Flex 应用程序至关重要。通过深入探索这些概念,并遵循上述提到的最佳实践,开发者不仅能够构建出更加健壮的应用程序,还能进一步挖掘 Flex 框架的潜力,实现更为复杂的功能。希望本文能够为 Flex 开发者提供有价值的参考。
剩余28页未读,继续阅读
- 粉丝: 2
- 资源: 15
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助