`
strugglesMen
  • 浏览: 111331 次
  • 性别: 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框架的基本原理.docx Flex框架的基本原理.docx

    Flex框架的基本原理.pdf

    Flex框架的基本原理.pdf

    基于Flex和Spring构建RIA系统的研究与应用

    flex是一种强大的构建RIA系统的方案, 本文介绍了flex的关健技术及其数据服务的基本原理。 spring是一种轻量级的J2EE架构 , 本丈提出了一种结合flex和spring构建RIA系统的框架 , 并简要描述了其体实现

    Flex开发者的福利

    两年的的flex开发,常用功能做成了各个小例子,基本上包含了其中包含的功能有:系统框架,布局控件,菜单控制,分组栏,收缩控件,Excel导出,统计图,下载,分页等常用常用功能,其中还有一个自己写的分栏收缩控件...

    基于Flex的网页游戏的研究与设计.pdf

    然后分别针对服务器端和客户端进行了设计和实现,服务器端采用J2EE经典架构,采用Spring矛IHibernate等流行框架,客户端采用PureMVC框架,两者通信采用Red5服务器提供的接口,初步完成了网页游戏的基本功能。...

    java经典框架springmvc+mybatis

    Java原理和使用,包括基本的语言、语法知识和API JSP+Servlet,Java Web开发的基础 这方面可以关注Java开发基础专题。 2&gt;服务器: WebLogic的原理、使用和配置 Tomcat:轻量的JavaWeb容器,和WebLogic功能类似...

    基于Jetty+Servlet+Jsp+MySQL+MyBatis技术实现的简单博客系统

    本博客系统主要使用Jetty技术+Servlet技术+Jsp技术+BootStrap前端框架+wangEditor富文本编辑器+MySQL数据库+MyBatis持久层,通过对该系统的设计,可以在实践过程中掌握相关基础知识,如对三层架构开发模式的熟悉、...

    一个Lex/Yacc完整的示例(可使用C++)

    本框架是一个lex/yacc完整的示例,用于学习lex/yacc程序基本的搭建方法,在linux/cygwin下敲入make就可以编译和执行。 本例子虽小却演示了lex/yacc程序最常见和重要的特征: * lex/yacc文件格式、程序结构。 * 如何...

    Vue-Projects:Vue的Web项目

    基本组件包括:单选框,多选框,下拉框,数量框等 预览: 2. vueEleme 仿饿了么外卖app 核心商家模块:包括商品,评论,商家介绍等模块 开发方法: Vue-cli脚手架初始化项目,模拟json后端数据,了解webpack打包原理 ...

    lexyaccmingw

    * 交换函数swap功能的讨论 * 撤销和重做原理 * 撤销和重做的基本架构 * 将撤销和重做的基本架构模组化 * 处理多类型的对象以及命令管理 * 扩展的框架代码 * 处理复合对象 * 自动化的...

    asp.net知识库

    根据基本表结构及其数据生成 INSERT ... 的 SQL 简便的MS SQL 数据库 表内容 脚本 生成器 将表数据生成SQL脚本的存储过程 直接从SQL语句问题贴子数据建表并生成建表语句的存储过程 从SQL中的一个表中导出HTML文件...

    emWin5用户手册(中文)

    emWin 图形库 图形用户界面 版本 5.12 手册修订版 0 emWin V5.12 用户参考手册 © 1997 - 2011 SEGGER Microcontroller GmbH & Co....9 1 emWin 简介...................................................................

Global site tag (gtag.js) - Google Analytics