Externe Inhalte

Unterteilen Sie Ihre Anwendung in mehrere SWF-Dateien.

Mobilgeräte haben möglicherweise nur eingeschränkten Zugang zum Netzwerk. Damit der Inhalt rasch geladen werden kann, sollten Sie Ihre Anwendung in mehrere SWF-Dateien unterteilen. Versuchen Sie, die Codelogik und Bestände in der ganzen Anwendung wiederzuverwenden. Nehmen wir als Beispiel eine Anwendung, die in mehrere SWF-Dateien unterteilt wurde, wie in der folgenden Abbildung gezeigt:

In mehrere SWF-Dateien unterteilte Anwendung

In diesem Beispiel enthält jede SWF-Datei eine eigene Kopie derselben Bitmap. Diese Doppelverwendung kann durch den Einsatz einer Runtime Shared Library vermieden werden, wie in der folgenden Abbildung gezeigt:

Einsatz einer Runtime Shared Library

Mit dieser Technik wird eine Runtime Shared Library geladen, die die Bitmap den anderen SWF-Dateien zur Verfügung stellt. Die ApplicationDomain-Klasse speichert alle geladenen Klassendefinitionen und stellt sie zur Laufzeit über die getDefinition() -Methode zur Verfügung.

Eine Runtime Shared Library kann auch die gesamte Codelogik enthalten. Die ganze Anwendung kann zur Laufzeit aktualisiert werden, ohne dass sie neu kompiliert werden muss. Der folgende Code lädt eine Runtime Shared Library und extrahiert zur Laufzeit die in der SWF-Datei enthaltene Definition. Diese Technik kann mit Schriftarten, Bitmaps, Sounds oder jeder ActionScript-Klasse verwendet werden:

// Create a Loader object 
var loader:Loader = new Loader(); 
  
// Listen to the Event.COMPLETE event 
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, loadingComplete ); 
  
// Load the SWF file 
loader.load(new URLRequest("library.swf") ); 
var classDefinition:String = "Logo"; 
  
function loadingComplete(e:Event ):void 
{ 
    var objectLoaderInfo:LoaderInfo = LoaderInfo ( e.target ); 
     
    // Get a reference to the loaded SWF file application domain 
    var appDomain:ApplicationDomain = objectLoaderInfo.applicationDomain;     
  
    // Check whether the definition is available 
    if ( appDomain.hasDefinition(classDefinition) ) 
    {     
        // Extract definition 
        var importLogo:Class = Class ( appDomain.getDefinition(classDefinition) ); 
  
        // Instantiate logo 
        var instanceLogo:BitmapData = new importLogo(0,0); 
  
        // Add it to the display list 
        addChild ( new Bitmap ( instanceLogo ) ); 
    } else trace ("The class definition " +  classDefinition + " is not available."); 
}

Das Abrufen der Definition kann vereinfacht werden, indem die Klassendefinitionen in der Anwendungsdomäne der geladenen SWF-Datei geladen werden.

// Create a Loader object 
var loader:Loader = new Loader(); 
  
// Listen to the Event.COMPLETE event 
loader.contentLoaderInfo.addEventListener ( Event.COMPLETE, loadingComplete ); 
  
// Load the SWF file 
loader.load ( new URLRequest ("rsl.swf"), new LoaderContext ( false, ApplicationDomain.currentDomain) ); 
var classDefinition:String = "Logo"; 
  
function loadingComplete ( e:Event ):void 
{ 
    var objectLoaderInfo:LoaderInfo = LoaderInfo ( e.target ); 
     
    // Get a reference to the current SWF file application domain 
    var appDomain:ApplicationDomain = ApplicationDomain.currentDomain;     
  
    // Check whether the definition is available 
    if (appDomain.hasDefinition( classDefinition ) ) 
    {     
        // Extract definition 
        var importLogo:Class = Class ( appDomain.getDefinition(classDefinition) ); 
  
        // Instantiate it 
        var instanceLogo:BitmapData = new importLogo(0,0); 
  
        // Add it to the display list 
        addChild ( new Bitmap ( instanceLogo ) ); 
    } else trace ("The class definition " +  classDefinition + " is not available."); 
}

Dann können die Klassen, die in der geladenen SWF-Datei zur Verfügung stehen, über einen Aufruf der getDefinition() -Methode in der aktuellen Anwendungsdomäne verwendet werden. Sie können auch durch Aufrufen der getDefinitionByName() -Methode auf die Klassen zugreifen. Bei dieser Technik wird Bandbreite eingespart, da Schriftarten und große Bestände nur einmal geladen werden. Bestände werden nie in andere SWF-Dateien exportiert. Es gilt nur eine Einschränkung, und zwar muss die Anwendung getestet und über die loader.swf-Datei ausgeführt werden. Diese Datei lädt zuerst die Bestände und dann die SWF-Dateien, aus denen die Anwendung sich zusammensetzt.