了解Flex程序的生命周期
Flex程序从本质上讲,就是使用了(由AS编写的)Flex框架的Flash程序。
但在Flex程序中可以忽略timeline这个概念,所有的内容都集于一帧。
事实上Flex程序中的根,是继承flash.display.MovieClip的mx.managers.SystemManager。
SystemManager有两帧。第一帧是预加载程序,第二帧是主程序。
因此,所有程序在真正开始运行前,需要经过如下过程:
预初始(preinitialize)
程序在这个过程后,已经被实例化,但还未创建任何内容。
初始化(initialize)
程序在这个过程后,已创建好内容,但还未完成布局。
创建完成(creationComplete)
程序在这个过程后,已完成包括布局在内的所有创建。
在顺利完成以上3个过程后,SystemManager广播applicationComplete事件,意味着程序整装待发了。
SystemManager还管理着所有显示在前端的内容。包括弹出窗,鼠标指针,工具提示等。
SystemManager有一个叫totelLevelSystemManager的属性。当Flex程序是一个独立程序时,该属性指向SystemManager的实例,而当Flex程序是被加载到别的Flex程序时,该属性指向加载者的SystemManager实例。
所有UIComponents都有一个systemManager的属性,指向程序的SystemManager实例。
了解预加载器
预加载器由SystemManager在第一帧自动创建,当完成后发布complete事件,并进入第二帧,再由SystemManager删除。
除了complete以外,还有如下事件:
progress:程序下载过程
rslError:运行期共享库下载失败
rslProgress:运行期共享库下载过程
rslComplete:运行期共享库下载完成
initProgress:程序初始化过程
initComplete:程序初始化完成
在Flex程序中加载另一个Flex程序
被加载的Flex程序,在加载完毕后,自身内部会经历上述3个过程。最终,主程序才能对该程序进行有效的访问。
<!--------------------------------------
B.mxml 生成 B.swf
---------------------------------------->
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
public function setBackground(color:Number):void {
canvas.setStyle("backgroundColor", color);
}
]]>
</mx:Script>
<mx:Canvas id="canvas" backgroundColor="#FFFFFF" width="100" height="100" />
</mx:Application>
<!--------------------------------------
A.mxml 生成 A.swf 加载 B.swf
---------------------------------------->
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:Script>
<![CDATA[
import mx.managers.SystemManager;
import mx.events.FlexEvent;
private function initHandler(event:Event):void {
event.target.content.addEventListener(FlexEvent.APPLICATION_COMPLETE, applicationCompleteHandler);
}
private function applicationCompleteHandler(event:Event):void {
event.target.application.setBackground(0xFFFF00);
}
]]>
</mx:Script>
<mx:SWFLoader source="B.swf" init="initHandler(event)" />
</mx:Application>
了解程序作用域
当程序中牵涉到加载外部.swf程序时,了解程序作用域的概念是非常重要的。
首先要了解所有的Flex/Flash程序都是由一系列类组合而成。这一系列类都维持在一个程序作用域中。当仅有一个程序在运行时,程序作用域的概念只是一个形式,因为不可能发生作用域冲突的事情。当加载额外的.swf程序后,情况就不一样了,此时,可能会发生3种情况:
被加载的.swf在现有作用域的子作用域中运行
这种情况下,被加载.swf可以使用父作用域中的所有类,而本身作用域中和父作用域中冲突的类,将被忽视。
这样子有3个好处:
减少内存的占用。
单态管理者(Singleton manager classes)可以访问父级程序,也可以访问子级程序。
从技术角度讲,在编译子级程序时,可以不用把重复的类编译进去,从而减少文件大小
但有时不能忽视子作用域的类。比如碰到类名虽然冲突,但功能却不相同时。
被加载的.swf在一个新的完全独立的作用域中运行
这种情况下,被加载.swf在一个不受任何约束的作用域中运行。虽然不会发生什么冲突,但这样会加大内存的占用。
被加载的.swf在现有作用域中运行
这种情况下,被加载.swf在现有的作用域中运行,被看作现有内容的一部分。常常用于运行期共享库。
实现上述3种情况的代码如下:
//------------------------------------------------------------
// 被加载的.swf在现有作用域的子作用域中运行
//------------------------------------------------------------
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
var request:URLRequest = new URLRequest("RuntimeLoadingExample.swf");
var loader:Loader = new Loader();
loader.load(request, context);
// 等同于
var request:URLRequest = new URLRequest("RuntimeLoadingExample.swf");
var loader:Loader = new Loader();
loader.load(request);
//------------------------------------------------------------
// 被加载的.swf在一个新的完全独立的作用域中运行
//------------------------------------------------------------
var context:LoaderContext = new LoaderContext();
context.applicationDomain = new ApplicationDomain();
var request:URLRequest = new URLRequest("RuntimeLoadingExample.swf");
var loader:Loader = new Loader();
loader.load(request, context);
//------------------------------------------------------------
// 被加载的.swf在现有作用域中运行
//------------------------------------------------------------
var context:LoaderContext = new LoaderContext();
context.applicationDomain = ApplicationDomain.currentDomain;
var request:URLRequest = new URLRequest("RuntimeLoadingExample.swf");
var loader:Loader = new Loader();
loader.load(request, context);
loadContext
ApplicationDomain
Flash Player和Flex框架的不同
Flash Player是Flash/Flex程序的运行环境。它用来运行.swf文件,完成加载图片,绘制图像,请求HTTP等之类的操作。Flash/Flex程序只能做Flash Player能够做的事情。
Flex程序就是Flash程序,Flash不能做的事情,Flex一样不能做。所以程序包含的只不过是具体指令,而Flash Player则是运行指令。Flash程序和Flex程序在内容上没有不同,只是在创建内容时不同。
Flex的编译器可以编译MXML和AS。由AS和MXML编写的Flex框架抽象出一个更高级的层面。这些都能在Flash Player中运行。
改善的是开发速度。
负面影响则是增加了.swf的大小。因为Flex框架是要被具体编译到.swf里面的,而不像Flash Player API已经集成在Flash Player内部了。
出自:http://blog.csdn.net/holybozo/archive/2007/09/16/1787270.aspx
分享到:
相关推荐
通过以上介绍,我们可以看出,Flex的itemRenderer机制为数据驱动的应用提供了强大的自定义能力,使得我们能够创建丰富多样的用户界面。正确理解和运用itemRenderer,能够极大地提升Flex应用的用户体验和功能表现。
通过上述内容,我们了解了Flex事件机制的基本概念及其重要组成部分,包括事件的触发与处理、事件注册通道的作用、事件分发的过程以及事件对象的属性。对于Flex开发者而言,熟练掌握这些知识可以帮助他们更加高效地...
- 企业级应用:Flex常用于构建企业内部的工作流管理系统、报表系统、CRM系统等,提供友好的用户界面和高效的交互体验。 - 媒体播放器:利用Flex可以构建自定义的多媒体播放器,支持视频、音频的播放控制,以及丰富的...
三、Flex4开发流程 1. 环境搭建:包括安装Adobe Flex Builder或使用Eclipse插件,配置Flash Player或Adobe AIR运行环境。 2. 项目创建:选择Flex 4模板,设置项目属性,如编译目标、主题等。 3. UI设计:使用MXML...
通过深入研究Flex 3.0的源码,我们可以更好地理解其内部工作机制,提升我们的开发技能和优化应用性能。 在Flex 3.0中,最重要的组件之一是Flex Framework,它包括了UI组件、数据绑定、事件处理、布局管理等核心功能...
- **数据绑定**:Flex支持数据绑定机制,能够将界面上的控件与数据模型中的数据进行自动同步更新,简化了数据管理流程。 #### 三、高级开发技术 - **自定义组件**:开发者可以根据需求创建自己的UI组件,通过继承...
通过研究Flex系统源码,开发者不仅可以学习到Flex框架的内部工作原理,还能学习如何扩展和定制Flex组件,从而提高应用开发的专业水平。对于想要深入理解Flex技术栈的人来说,这份源码是一个宝贵的资源。
4. **数据绑定**:Flex3引入了数据绑定机制,使得视图和模型之间的交互变得简单。当模型数据变化时,视图会自动更新;反之亦然。 5. **事件处理**:Flex3使用事件驱动架构,事件处理是其重要组成部分。事件可以是...
源代码分析可以帮助开发者深入理解地图组件的内部机制,例如数据加载、渲染过程、用户交互处理等。 “工具”标签可能是指用于辅助开发或调试Flex地图应用的工具,比如Flex Builder(现已被Adobe Flash Builder取代...
Flex 4.0带来了许多显著的改进和新特性,包括Spark组件模型、Skinning和Styling机制、新的图形和动画引擎以及数据绑定增强。这些更新极大地提高了开发者的灵活性和应用程序的表现力。 1. Spark组件模型:Flex 4.0...
【标签】:“源码”表明讨论可能包括了Flex项目的代码结构、编程实践、代码优化等方面,帮助读者理解Flex应用的内部工作原理。而“工具”可能意味着博客中提到了与Flex开发相关的工具,如Flex Builder(现称Flash ...
通过源码学习Flex4:Adobe Flex 4 Vol.1,这一资源为开发者提供了一个深入了解Adobe Flex 4框架内部机制的机会。Adobe Flex是一个用于构建和部署跨浏览器、跨平台的富互联网应用程序(RIA)的开源软件框架。它由...
标题中的“flex流程编码器(开源)”指的是一个使用Adobe Flex技术开发的,专门用于创建和编辑工作流的开源工具。Flex是一种基于ActionScript 3.0的编程框架,它允许开发者构建富互联网应用程序(RIA),这些应用...
无论是开始新项目,解决现有问题,还是深入理解Flex的内部机制,这些文档都能提供强大的支持。开发者可以通过查阅API文档快速定位所需功能,而开发指南则能引导他们逐步掌握Flex开发的全过程。因此,这个压缩包对于...
这个实例涉及的是在Flex中的Tree组件实现节点的内部拖放功能,这对于创建交互式用户界面,尤其是数据层级结构的展示非常有用。在本文中,我们将详细探讨如何在Flex的Tree组件中实现节点的拖放操作,并且限制可拖动的...
4. **数据绑定**:利用Flex的数据绑定机制,将颜色节点的位置和颜色属性与模型数据绑定,这样当模型数据改变时,视图会自动更新。 5. **自定义组件**:创建一个自定义的MXComponent或Spark Component,继承自...
这一过程的核心就是反射机制,它允许运行时动态地创建对象、访问对象的属性以及调用方法,无需预先知道具体类的信息。 在配置文件remoting-config.xml中,我们可以看到BlazeDS如何定义服务端Java对象的适配器。例如...
在这个系统中,Flex的优势在于其强大的图形用户界面(GUI)组件库和数据绑定机制,使得创建复杂的用户界面变得简单且直观。 该系统的核心功能可能包括但不限于以下几个方面: 1. **会议创建与管理**:用户可以方便...
6. **图形与动画**:教授如何利用Flex创建动态效果和动画,提升用户交互体验。 7. **事件处理**:讲解事件模型,如何监听和响应用户操作,以及程序内部事件。 8. **错误处理与调试**:提供错误处理策略和调试技巧...
Cairngorm Extensions是一个流行的Flex MVC框架,它简化了Flex应用程序的设计和开发过程。 - **Model**: 用于管理数据模型和业务逻辑。 - **View**: 负责用户界面的展示。 - **Controller**: 作为模型和视图之间的...