您的位置:首页 > 移动开发

Flex应用程序生命周期

2009-12-02 16:31 190 查看
Flex应用的根是SystemManger,它是flash.display.MovieClip的子类,一个Flash Player显示对象类型。SystemManager有两个帧,第一帧是用来显示应用载入的进度指示,这个帧是轻量的,所以它几乎能立即下载和运行。第二帧便是应用本身。当一个Flex应用的SystemManager实例进入到第二帧,它创建一个主应用的实例。SystemManager实例有一个application属性,在它第二帧创建应用对象之前,它是null的。在那个点,应用实例被初始化并运行它自己的启动处理。意指所有的应用对象内部的生命周期事件发生。内部的生命周期事件为: preinitialize应用被初始化,但仍没创建任何子组件。 initialize应用已创建子组件,但极布局这些组件。 creationComplete应用已被初始实例化完成,并已布局所有的组件。一旦应用完成它的内部启动处理,它通过分发applicationComplete事件通知SystemManager。从这个点之后,应用准备运行了。 SystemManager也管理所以被在前台显示的内容,即所有的pop ups,光标,工具提示。 SystmeManager 有一个toplevelSystemManager的属性,引用到当时在FlashPlayer里运行的根级的SystemManager实例。当一个应用是作为FlashPlayer的主应用被载入的,这个属性总是自引用的,然而,当一个应用是被另一个应用载入的,这个被载入应用的 SystemManager对象的topLevelSystemManager则是引用到父应用。虽然你不常要引用SystemManager, 但需要时可以做。所有的UIComponents(包括Application)的子类都有一个systemManager属性引用到 application的SystemManager。开发者常喜欢使用SystemManager来监听应用中任何显示对象分发的事件。当事件冒泡时,有机会操控(handle)事件的最后的对象便是SystemManager. FlashPlayer和框架的不同 FlasyPlayer 是Flash和Flex应用的运行环境。它能运行.swf文件。该文件包含这些字节代码:能与FlashPlayer通信,命令它执行载入图像,画图,发起http请求等等操作。Flash和Flex应用只能做那些FlashPlayer允许他们做的,FlashPlayer提供可执行的API. 应用只包含命令,而FlashPlayer则负责运行这些命令,所以Flash和Flex应用的不同不是内容,而是怎样创建内容。使用框架的代价是.swf文件尺寸的增长,这与用纯AS写的项目形成反差。因为当你不用Flex框架,你是直接引用FlashPlayer的主类,这些类已经在FlashPlayer中了,他们不需被编译进.swf文件。在用Flex框架时,简单的增加一个组件也会增加很多的文件尺寸,因为它需要编译的一个类或一个类库并不是FlashPlayer的一部分。 若类的包是以flash.开头,它是FlashPlayer的一部分;若类的包是以mx.开关,它是Flex框架的一部分; MXML标签几乎总是(少数的例外)对应Flex框架类。 Bootstarapping Flex Applications 一个Flex应用的根并不是一个Application对象,实际上一个Application标签创建的是一个mx.managers.SystemManager对象。 flash.display.MovieClip是一个显示对象,允许你对时间轴编程。但在Flex应用中并不怎用时间轴,因为没有编程方法增加一个帧到到个时间轴。但时间轴和帧仍是SystmeManager的基本部分之一。因为没有方法编程的增加帧,几乎Flex应用中的所有显示对象只由一个帧组成,但SystemManager是个例外,它有两个帧,一个用于预装载,主应用对象存在第二帧中。一般情况下,你不需知道这些,但在至少两个情况下你需了解它:在一个Flex应用中载入另一个Flex应用;定制预装载器。 Loading One Flex Application into Another Flex Application 当一个SWFLoader载入一个Flex 应用,这个SWFLoader对象的contern属性提供了对被载入应用的根的引用,也即是被载入应用的SystemManager对象。这个 SystemManagr类定义一个application属性可引用Application对象。但这个属性在Flex 应用被载入时还是null,在第二帧之前,它是不会被创建的。那要怎样引用它呢?有个优雅的方法可以解决这个问题:当一个SWFLoader载入和初始化了内容,它分发init事件,在init的事件处理里,你能够引用被载入内容的SystemManager了,此时你就增加一个事件侦听器,监听这个SystemManager的applicationComplete事件。而在这个applicationComplete的事件触发之后,在它的处理里,你就可以引用被进入内容的Application对象了。例子:要被载入的应用:B.MXML

public function setBackground(color:Number):void {
canvas.setStyle("backgroundColor", color);
}

父应用:
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息