Flex load modules READY 事件不触发问题

在使用ModuleLoader加载器;和使用ModuleManager进行加载flex模块时,必须要把对应的变量定义为全局变量, 否则其READY事件不会触发。

      参考过很多资料, 归其根本是由于在加载器调用了load方法后, 如果变量未定义为全局变量,那么可能被flxe的gc机制给卸载掉,也即根本的解决方法是不然加载器被gc,即要使用时必须留有应用。由于开始没明白其中道理,犯了个错误。如代码:

Java代码  收藏代码
  1. public class TaskLoadModule  
  2.     {  
  3.         public function TaskLoadModule()  
  4.         {  
  5.             super();  
  6.         }  
  7.         protected var moduleInfo:IModuleInfo  
  8.         public function loadFromLocal($local:String):void{  
  9.             moduleInfo = ModuleManager.getModule(local);  
  10.             moduleInfo.addEventListener(ModuleEvent.READY,moduleInfoReadyHandler);  
  11.             moduleInfo.addEventListener(ModuleEvent.ERROR,moduleInfoErrorHandler);  
  12.             moduleInfo.addEventListener(ModuleEvent.PROGRESS,moduleProgressHandler);  
  13.             trace('Module start load');  
  14.             moduleInfo.load();  
  15.         }  
  16.         public function moduleProgressHandler($e:ModuleEvent):void{  
  17.             trace('Module load progress: '+$e.bytesLoaded+" / "+$e.bytesTotal);  
  18.         }  
  19.         public function moduleInfoReadyHandler($e:ModuleEvent):void{  
  20.             trace('Module load ready: '+local);  
  21.         }  
  22.         public function moduleInfoErrorHandler($e:ModuleEvent):void{  
  23.             trace($e.errorText);  
  24.         }  
  25.     }  

 

    如上定义的moduleInfo在类中确实为全局变量,但是我在页面中引用的代码却是如下:

   

Java代码  收藏代码
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009"   
  3.                        xmlns:s="library://ns.adobe.com/flex/spark"     
  4.                        xmlns:mx="library://ns.adobe.com/flex/mx"  >  
  5.     <fx:Script>  
  6.         <![CDATA[  
  7.   
  8.             protected function button1_clickHandler(event:MouseEvent):void  
  9.             {  
  10.                 var load:TaskLoadModule=new TaskLoadModule();  
  11.                 load.load("module/TestModule.swf",null);  
  12.             }  
  13.   
  14.         ]]>  
  15.     </fx:Script>  
  16.     <s:Button x="205" y="0" label="按钮" click="button1_clickHandler(event)"  />  
  17. </s:WindowedApplication>  

    这样就出现了,在click事件执行完成后,TaskLoadModule也会被gc,相应的moduleInfo也被gc掉了,所以一直未触发moduleInfo的Ready事件。

发布了115 篇原创文章 · 获赞 5 · 访问量 34万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章