Flex的根对象就是SystemManager,而不是我们平常看到的Application。
SystemManager是第一个在Flex应用中被创建的Display Class,继承自flash.dispaly.MovieClip,所以才能实现Preloader和Application的2个frame。
SystemManager有一个topLevelSystemManager对象,指向一个SystemManager实例,是所有当前在flash player运行的任何东西的根(root),如果flex被作为主应用加载到flash player则上述属性将指向其本身(self-refrencing),但当flex应用是被另一flex应用载入的,其自身的SystmenManager的topLevelSystemManager属性则不是自引用了,而是指向其父应用的SystemManager实例。所有UIComponent的子类都有一个systemManager属性指向应用的SystemManager实例,在被SystemManger实例监听的component的事件发生冒泡时,其将拥有事件处理链上最后的处理权。
PreloaderPreloader是一个轻量级的类,在systemManager的第一帧被实例化,preloader会dispatch出一系列的事件,由progress bar监听实现loading界面,一旦应用进入第二帧待application初始化后会借由system manager通知preloader初始化进度,preloader通知system manager其准备待删除,主要是一些初始化设定和下载runtime share library。Preloader的事件: progressIndicates download progresscompleteIndicates that the download is completerslErrorIndicates that a runtime shared library could not loadrslProgressIndicates the download progress for a runtime shared libraryrslCompleteIndicates that the download is complete for runtime shared librariesinitProgressIndicates that the application is initializinginitCompleteIndicates that the application has initialized在理解Preloader的同时也要反方向思考纯AS工程中如何做Preloader,以前就写过AS3工程 Custom Preloader 動態加載 Application可以进行思考。
ApplicationApplication是我们平日用到的最多的类,在systemManager的第二帧被实例化,它是一个单例化的类,因此无论你new多少个Class它都会指向同一个instance实体,根据创建时间的进度,它同样会dispatch出一系列的事件。Application的事件:preinitializeapplication已经实例化但尚未创建任何child componentinitialize已经创建child component但未对其进行布局(lay out)creationCompleteapplication已经完成实例化并完成所有child component的布局applictionComplete已经准备完成Flex SWF必要的初始化