2011-05-11 2 views
0

をアンロード、このクラスのように:フレックスは、ModuleManagerによって、私は、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"を使用してボックスをポップアップ、それは1つのボックスになります。しかし、実際には、それはポップトウボックスです。 私はFlashビルダーを使ってこのコードをデバッグしていますが、swfをunloadeしていることに気が付いていません。 私はapplictionでtowモジュールを持っていると思います。 だから、私は助けが必要です。 ModuleManagerでモジュールをアンロードする方法。私はアプリケーションではなく、トウで1つのモジュールを願っています。おかげさまで

答えて

1

質問を正しく理解すると、モジュールのアンロードに問題があるようです。これらの問題の解決に役立つ素晴らしいAdobe resourceがあります。いくつかの注意事項:

「あなたがアンロードされないモジュールがある場合は、問題を診断する手順は次のとおりです。 は1)モジュールは、負荷のための子供のApplicationDomain(使用デフォルトパラメータにロードされていることを確認します()メソッド)ほとんどの場合) 2)プロファイラを使用して、モジュール内のオブジェクトへの参照がないことを確認してください。

モジュール内のオブジェクトを参照すると、モジュールはアンロードされません。

  1. スタイル
  2. リソース
  3. ExternalInterface.addCallback機能
  4. タイマーとタイマーメカニズム
  5. リスナー
  6. :あなたは、次の領域が問題のモジュールへの参照をしないことを確認したくなるでしょうフォーカス
  7. リモートオブジェクト
  8. ロードされたイメージ
+1

これは可能ですが、静的変数を使用しており、イベントリスナーを削除していないため、潜在的な問題が発生しているコードを追加することもできます。 –

+0

こんにちは、私は初心者です。コードは良くなく、私の母国語は中国語です。だからお返事ありがとうございました。 – Lee

+0

そしてコードを修正します。 – Lee

関連する問題