2011-05-11 102 views
0

我使用ModuleManager會加載一個模塊,這樣的類:的Flex ModuleManager會卸載模塊

public class LoadModule 
    { 
     private static var info:IModuleInfo; 
     private static var display:IVisualElement; 
     private static var downloadBar:ProgressBar; 
     private static var parent:Group; 


     public function LoadModule() 
     { 

     } 
     //load module 
     public static function load(url:String, parent:Group, bar:Boolean = true):void { 
      LoadModule.parent = parent; 
      info = ModuleManager.getModule(url); 
      info.addEventListener(ModuleEvent.READY, readyHandler); 
      info.addEventListener(ModuleEvent.SETUP, setupHandler); 
      info.addEventListener(ModuleEvent.ERROR, errorHandler); 
      info.load(null, null, null, parent.moduleFactory); 

     } 

     //add display object 
     private static function readyHandler(event:ModuleEvent):void { 
      LoadModule.display = event.currentTarget.factory.create() as IVisualElement; 
      parent.addElement(LoadModule.display); 
     } 

     private static function setupHandler(event:ModuleEvent):void { 

     } 
     //unload module 
     public static function unload():void { 
      if (LoadModule.info != null) { 
       LoadModule.info.addEventListener(ModuleEvent.UNLOAD, unloadHandler); 
       LoadModule.info.unload(); 
       if (parent.getElementIndex(LoadModule.display) != -1) { 
        parent.removeAllElements(); 
        LoadModule.display = null; 
       } 
      } 
     } 

     private static function unloadHandler(event:ModuleEvent):void { 
      LoadModule.info.removeEventListener(ModuleEvent.UNLOAD,unloadHandler); 
      trace("unloadModue"); 
     } 
     // 
     private static function progresshandler(event:ModuleEvent):void { 
      downloadBar.label = "haved" + Math.round((event.bytesLoaded /event.bytesTotal) * 100) + "%"; 
     } 

     private static function errorHandler(event:ModuleEvent):void { 
      throw Error(event.errorText); 
     } 

     public static function setDownloadbar(downloadBar:ProgressBar):void { 
      LoadModule.downloadBar = downloadBar; 
     } 
    } 

然後我加載模塊和卸載模塊:

LoadModule.unload(); // 1 
    LodModule.load('..one.swf', parent); 
    LoadModule.unload(); //2 
    LodModule.load('...one.swf', parent); 

從理論上講,這是隻在一個模塊我的應用程序,我用「PopUpManager」彈出一個框,它應該是一個框。但是,事實上,它是流行拖車箱。 我使用Flash builder調試這段代碼,並且它沒有注意到我的unloade swf ..我想,它有兩個模塊在應用。 所以,我需要幫助。如何在ModuleManager中卸載模塊。我希望一個模塊在應用中,而不是兩個。 謝謝。

回答

1

如果我正確地理解了這個問題,聽起來好像你在卸載模塊時遇到了問題。有一個偉大的Adobe resource,可以幫助你解決這些問題。有幾個方面的考慮:

「如果你有一個不卸載模塊,來診斷問題的步驟是: 1)確保模塊被加載到子級ApplicationDomain(使用默認的負荷參數()方法) 2)使用分析器確保模塊中沒有對象的引用。「

如果您引用模塊中的任何對象,模塊將不會卸載。您將要檢查以下幾個方面使問題沒有提及到模塊:

  1. 樣式
  2. 資源
  3. ExternalInterface.addCallback功能
  4. 及Timer機制
  5. 聽衆
  6. 焦點
  7. 遠程對象
  8. 加載的圖像
+1

這是一個確定的可能性,但我也想補充一點,因爲您使用的是靜態變量並且沒有刪除事件偵聽器,所以您當前擁有的代碼已經充滿了潛在的問題。 –

+0

嗨,我是初學者。代碼不好,我的母語是中文。所以謝謝大家回答。 – Lee

+0

我將修改代碼。 – Lee