Flex Application初始化顺序
? 转自:http://blog.sina.com.cn/s/blog_4cfe78830100am2g.html Flex Application初始化顺序 preloader->systemManager->FlexApplication started... preinitialize initialize creationComplete applicationComplete 首 先介绍一下SystemManager. SystemManager是Flex应用的主控者,它控制着应用窗口,Application实例,弹出窗口,cursors,并管理着ApplicationDomain中的类. SystemManager是FlashPlayer实例化的第一个类,它存储了主应用窗口的大小和位置信息,保存其子组件比如:浮动弹出窗口和模态窗口的痕迹. 通过SystemManager可以获得内嵌字体,样式和document对象. 通常,Application对象创建时,发生如下事件: 大 多数情况下,我们使用<mx:Application>来创建application对象,但如果使用ActionScript来创建的话,那么建议不要在application的构造函数中创建组件,推荐在crateChildren函数中,主要是从性能方面考虑. Flash包含的是一个时间线上的多个帧,而Flex的SWF只包含2个帧. SystemManager,Preloader,DownloadProgressBar和少量工具类都在第一帧,剩下的包括应用代码/ 内嵌资源全都在第二帧中. 当Flash Player下载下载SWF时,只要接收到第一帧内足够的数据,就会实例化SystemManager,由它来创建Preloader,然后创建DownloadProgressBar,这两个对象会察看剩余字节的传输过程. 当第一帧的所有字节传输完毕后,SystemManager发送enterFrame到第二帧,然后是其他事件. 最后Application对象派发applicationComplete事件. Flex 是一个事件驱动的编程模型,任何事情的发生,其背后必然存在一个事件. 而开发者第一次看到MXML时,很难体会到一个Xml标记的应用的事件流和实例化的生命周期. 这个对于HTML和Flash的开发者尤其会感到困惑,因为其熟悉的方式与Flex的一点也不相似. HTML的实例化是从上到下的,Flash的执行是从Frame0开始一帧帧运行的. 而Flex则又有不同. 从我们开始学习Flex时,我们就需要了解事件流和MXML的实例化. 我非常困惑因为我实在难以理解什么样的事件会被触发或者事件什么时候会被触发. 关键是要理解事件的基础并亲自观察事件流的初始化. 我们来看一个简单的MXML的应用. ?
这个应用运行时,输出了实例流程和事件流. 这校我们就能够看到所有事件的触发顺序. 可以发现应用启动后,事件的顺序是一定的. 下面是输出的内容: 167ms >> EventFlow0.preinitialize 一旦applicationComplete事件触发后,组件就会在鼠标事件派发后触发自己的事件. 1807ms >> EventFlow0.HelloButton.rollOver2596ms >> EventFlow0.HelloButton.rollOut2954ms >> EventFlow0.HelloButton.rollOver3170ms >> EventFlow0.HelloButton.rollOut3543ms >> EventFlow0.HelloButton.rollOver4052ms >> EventFlow0.HelloButton.click > Hello!4267ms >> EventFlow0.HelloButton.click > Hello!4474ms >> EventFlow0.HelloButton.click > Hello!4569ms >> EventFlow0.HelloButton.rollOut4907ms >> EventFlow0.GoodByeButton.click > Goodbye!5130ms >> EventFlow0.GoodByeButton.click > Goodbye! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |