Flex程序启动过程再探秘: (2)启动过程 未完。。。。。

>>事前准备

(1) 构建名为test的Flex Project。

        主程序test.mxml的代码如下:

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
			   xmlns:s="library://ns.adobe.com/flex/spark" 
			   xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">
</s:Application>


(2) 添加编译器参数: -keep-generated-actionscript=true

(3) 编译该Flex Project。

 

通过上述步骤,可在bin-debug目录下获得generated目录,其下是编译器自动生成的中间源代码文件。我们在分析Flex程序启动过程的时候,需要用到它们。

components_properties.as
controls_properties.as
core_properties.as
effects_properties.as
layout_properties.as
skins_properties.as
styles_properties.as
test-generated.as
test-interface.as
_class_embed_css_Assets_swf_1746260725_mx_skins_cursor_BusyCursor_11959375.as
_test_FlexInit-generated.as
_test_mx_managers_SystemManager-generated.as
_test_Styles.as


>>Flex程序启动过程(需要参照源代码)

 1。FlashPlayer自动实例化类 _test_mx_managers_SystemManager,其构造函数被自动调用。

      (1)  _test_mx_managers_SystemManager的构造函数调用了父类mx_managers_SystemManager的构造函数。

              _test_mx_managers_SystemManager类是mx_managers_SystemManager的子类,它由Flex编译器在编译期间根据我们设置的编译器参数和静态模板动态生成。

 

2。父类mx_managers_SystemManager的构造函数

     (1) 调用stop()函数,阻止进入下一桢。

     (2) 设置事件监听函数initHandler,对Event.INIT事件进行监听。然后程序什么都不做,等待Event.INIT事件的发生。

             关于Event.INIT事件,请参考 http://blog.csdn.net/tiangej/article/details/7331119

 

3。initHandler函数执行(Event.INIT事件发生)

     (1)  设置事件监听函数docFrameListener,对Event.ENTER_FRAME事件进行监听(http://blog.csdn.net/tiangej/article/details/7217756)。

     (2)  调用initialize()函数。

              (注意:在此后的流程型代码没有执行完毕之前,不会发生Event.ENTER_FRAME事件。这是FlashPlayer弹性跑道模型决定的)

      

4。initialize()函数

      (1)  创建进度条实例: preloader = new Preloader();

      (2)  设置事件监听函数,用来监听加载事件,加载的对象包括自身主swf文件、Adobe签名的RSL、自定义RSL等。

               主要被监听的事件和监听函数是:

               Event.COMPLETE  ----------    preloader_completeHandler()                     自身主swf文件加载完毕后发出该事件(其后还要加载RSL)

               FlexEvent.PRELOADER_DONE    ----------    preloader_preloaderDoneHandler()                     加载对象全部加载完毕后发出该事件。在监听函数中要移除进度条实例,并实例化Application。

 

     (3)  获得加载对象(RSL)列表

        var rsls:Array = info()["rsls"];
        var cdRsls:Array = info()["cdRsls"];

              http://blog.csdn.net/tiangej/article/details/7322982

 

      (4)  开始加载

preloader.initialize(......)


 

 

 

                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值