Flex系统管理器

Flex系统管理器

Flex系统管理器SystemManager是Flex应用的主控者,他控制着应用窗口、Application实例、弹出窗口、cursors。SystemManager是FlashPlayer实例化的第一个类,他存储了主应用窗口的大小和位置信息,保存其子组件比如浮动弹出窗口和模态窗口的痕迹。

Application对象创建时,发生如下事件:

1.初始化Applicatoin对象

2.初始化SystemManager

3.Application在初始化过程之前,派发预初始化事件

4.调用createChild(),所有组件被调用

5.Application派发初始化事件,表明所有组件初始化完毕

6.派发createComplete事件

7.Application对象添加到显示列表中

8.派发applicationComplete事件

 

 

Flash包含一个时间线上的多个帧,而Flex的SWF只包含2个帧,SystemManager、Preloader、DowmloadProgressBar和少量的工具类都在第一帧,剩下的Flex框架代码、应用代码、应用内嵌资源都在第二帧

 

当FlashPlayer下载SWF时,SWF文件会以“流”的形式不断流向客户端的FlashPlayer。只要接收到第一帧内足够的数据,就会实例化SystemManager,由他创建Preloader,然后创建DowmloadProgressBar,用来显示当前加载初始化的进度,这两个对象会查看剩余字节的传输过程。当第一帧所有字节传输完毕后,SystemManager发送enterFrame到第二帧,然后是其他事件,发布creatoinComplete事件派发后,Preloader将删除DowmloadProgressBar控件,SystemManager实例把application实例添加到FlashPlayer的DisplayList中,最后application实例派发applicationComplete事件。到现在,Flex应用程序创建并配置好,可以运行了。

SystemManager类扩展MovieClip,是个功能极其强劲的影片剪辑,他的详细职责如下:

1.创建并初始化Preloader,显示Flex应用的加载进度

2.管理运行时共享库(RSLs)的加载

3.管理模块(Module)逻辑,如果SystemManager是SWF的root,他就知道他是一个Flex应用程序(Flex APP)如果不是SWF的root,他就知道他是一个Flex模块(Flex Module)SystemManager在APP和Module之间进行事件通讯(鼠标事件和键盘事件)

4.管理从Stage发布的Event.RESIZE事件

5.管理嵌入字体列表

6.初始化一些管理单例类(ResourceManager和StylesManager)

7.管理顶级的应用程序窗口。SystemManager顶级显示层的管理器,凡是父级为SystemManager的显示层都是顶级显示层,应用程序、弹出窗口、工具提示、鼠标光标都是父级为SystemManager的顶级层,

popUpChildren:IChildList,toolTipChildren:IChildList,cursorChildren:IChildList并不是具体的显示层而是记录顶层的集合,SystemManager自动维护这些集合,使得弹出窗口、工具提示、鼠标光标总是位于应用之上

8.维护一个cursorChildren列表和popUpChildren列表。他们分别用作实现tooltips和popUp windows


9.一旦你的Flex SWF文件的所有代码加载完毕,SystemManager创建你的Application实例并调用此实例的initialize方法

10.一旦application实例发布他的FlexEvent.CREATION_COMPLETE事件,SystemManager将此实例添加到stage上,这是为什么在FlexEvent.CREATION_COMPLETE事件发布时,application实例没有指向stage的引用。而其他组件在FlexEvent.CREATION_COMPLETE都有指向stage的引用。Application在派发FlexEvent.APPLICATION_COMPLETE事件后,才有指向stage的引用。(Application拥有普通容器没有的ApplicationComplete事件,Application被SystemManager添加到显示列表后派发,完成度比createComplete更高,在这个事件中可以访问舞台 )

 


 

Application是Flex容器,他的初始化规则遵守普通组件的规则

 

让一个Flex项目载入另外一个Flex项目没有什么优势,不能很好的体现项目和模块的关系,我们应该使用Module来分割应用程序。

 

参考:

http://blog.chinaunix.net/uid-122937-id-3233133.html

 

你可能感兴趣的:(Flex系统管理器)