`
strugglesMen
  • 浏览: 115149 次
  • 性别: Icon_minigender_2
  • 来自: 杭州
社区版块
存档分类
最新评论

Flex框架的基本原理

阅读更多

Flex框架的基本原理

Flex程序从本质上讲,就是使用了(由AS编写的)Flex框架的Flash程序。
但在Flex程序中可以忽略timeline这个概念,所有的内容都集于一帧。
事实上Flex程序中的根,是继承flash.display.MovieClipmx.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
ApplicationDomainFlash PlayerFlex框架的不同
Flash PlayerFlash/Flex程序的运行环境。它用来运行.swf文件,完成加载图片,绘制图像,请求HTTP等之类的操作。Flash/Flex程序只能做Flash Player能够做的事情。
Flex程序就是Flash程序,Flash不能做的事情,Flex一样不能做。所以程序包含的只不过是具体指令,而Flash Player则是运行指令。Flash程序和Flex程序在内容上没有不同,只是在创建内容时不同。
Flex的编译器可以编译MXMLAS。由ASMXML编写的Flex框架抽象出一个更高级的层面。这些都能在Flash Player中运行。
改善的是开发速度。
负面影响则是增加了.swf的大小。因为Flex框架是要被具体编译到.swf里面的,而不像Flash Player API已经集成在Flash Player内部

分享到:
评论

相关推荐

    Flex框架的基本原理.docx

    通过这些基本原理,开发者能够理解Flex框架如何组织和控制应用程序的运行,从而更好地利用其强大的功能来构建复杂的用户界面和业务逻辑。Flex框架提供了一套完善的组件库,支持数据绑定,使得开发RIA变得更加便捷和...

    Flex框架的基本原理.pdf

    本文将深入探讨Flex框架的基本原理。 在Flex程序中,尽管底层是Flash技术,但与传统的Flash动画不同,Flex程序并不依赖时间轴(timeline)。Flex程序的结构基于单一帧模型,其根元素是一个继承自`flash.display....

    Flex Cairngorm框架生成器

    Flex Cairngorm框架生成器是一款专门针对Adobe Flex开发的工具,旨在简化Cairngorm...通过阅读该博客,你可以深入理解Flex Cairngorm框架生成器的工作原理,以及如何将其融入到自己的开发流程中,提升开发质量和速度。

    Flex游戏开发框架--GameFramework_MVC

    在使用Flex游戏开发框架GameFramework_MVC时,开发者需要理解MVC模式的基本原理,知道如何组织代码来符合这个模式。模型层负责处理游戏的数据和业务逻辑,视图层则负责显示和用户交互,而控制器层作为两者之间的桥梁...

    FLEX MVC框架指南与应用示例

    学习Flex MVC框架需要理解其基本原理,掌握如何创建模型、视图和控制器,以及如何在它们之间协调工作。此外,熟悉Java开发,尤其是与Flex客户端的集成技术,也是必不可少的。通过实际项目实践,可以更深入地理解和...

    Flex Viewer 入门学习 原理

    总结来说,Flex Viewer入门学习主要涉及理解其工作原理、框架结构、Widget开发、配置文件的应用以及与ArcGIS Server的集成。掌握这些知识,开发者就能灵活运用Flex Viewer构建出满足特定需求的GIS应用。

    flex+java+mysql做的一个简单的小程序

    1. **Flex**: Flex是一种开源的、基于MXML和ActionScript的框架,主要用于构建富互联网应用程序(RIA)。它允许开发者创建具有动态图形、视频和交互性功能的Web应用。在本项目中,Flex可能被用来设计用户界面,包括...

    flex flex和 java交互

    通过这个入门实例,开发者可以快速理解Flex与Java交互的基本原理,并为进一步的复杂项目开发奠定基础。在实际的企业级应用中,这种交互模式常用于构建用户友好的前端界面,同时利用Java的强大后端处理能力,实现数据...

    flex教程_chm

    API(Application Programming Interface)文档详细列出了Flex框架提供的所有类、方法、属性和事件,这对于理解Flex组件的工作原理、创建自定义组件以及优化代码性能至关重要。通过这个API文档,开发者可以迅速查找...

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

    这个过程涉及到 Flex 编译器的工作原理以及 SystemManager 的作用。 **示例代码**: ```as public class MyApplication extends Application { public function MyApplication() { super(); // 应用程序构造逻辑 ...

    Flex3中文版API

    Flex3虽然现在已被Flex4、Flex SDK 4.x和Adobe Animate CC等更新版本取代,但其基本原理和技术在现代RIA开发中仍然具有参考价值,特别是对于理解Flex框架的演进历程和ActionScript 3.0编程有重要的历史意义。...

    Flex自动生成css,框架,图片工具3合1

    总结来说,这个压缩包提供的工具集是Flex开发者探索和提升其技能的重要资源,涵盖了滤镜、基本图形以及组件样式的各个方面,对于深入理解和使用Flex框架有着极大的辅助作用。无论是初学者还是经验丰富的开发者,都...

    一些关于flex的示例网站

    总之,“一些关于flex的示例网站”覆盖了从Flex框架的基础到高级应用,再到CSS Flex布局的多个维度,为不同阶段的学习者提供了宝贵的资源。无论是新手还是有经验的开发者,都能从中找到提升技能的关键知识点和实用...

    flex-messaging-core.jar

    Flex Messaging Core是Adobe Flex框架的核心组件之一,主要负责实时的服务器到客户端的通信。这个Java Archive (JAR) 文件包含了实现AMF(Action Message Format)协议所需的类库,AMF是一种高效的数据序列化协议,...

    arcgis-viewer-flex-3.1-src框架源码

    1. **源码阅读**:通过阅读源码,可以深入理解ArcGIS Viewer Flex的工作原理,掌握地图显示、图层操作、事件处理等核心功能的实现方式。 2. **插件开发**:利用源码中的API和示例,开发者可以快速开发自己的插件,...

    flex 经典 皮肤主题

    Flex是Adobe公司开发的一种用于构建富互联网应用程序(RIA)的技术,它基于ActionScript编程语言和Flex框架。在本文中,我们将深入探讨Flex的经典皮肤主题及其与CSS样式、皮肤的关系。 一、Flex概述 Flex是一种开源...

    Flex开发环境配置教程

    同时,理解ActionScript的基本语法、MXML组件模型以及Flex框架(如Spark和MX)的工作原理对高效开发至关重要。 总的来说,配置Flex开发环境是开发高质量RIA的第一步。无论选择MyEclipse还是Eclipse,正确的配置和...

    经典的 flex 笔试题

    根据给定的信息,我们可以从标题、描述以及部分代码中提炼出与...通过以上分析,我们不仅了解了Flex中内存管理的基本原理和技巧,还学习了一些常见的框架及其应用场景,这对于提高Flex应用的性能和稳定性具有重要意义。

Global site tag (gtag.js) - Google Analytics