Externt innehåll

Dela upp ditt program i flera SWF-filer.

Mobilenheter kan ha begränsad åtkomst till nätverket. Om du vill läsa in ditt innehåll snabbt ska du dela upp programmet i flera SWF-filer. Försök genomgående att återanvända kodlogik och resurser i hela programmet. I bilden nedan visas ett exempel på ett program som delats upp i flera SWF-filer:

Program som delats upp i flera SWF-filer

I detta exempel innehåller varje SWF-fil en egen kopia av samma bitmapp. Denna dubblering kan undvikas om du använder ett delat bibliotek under körningen. Se bilden nedan.

Använda en RSL-fil (bibliotek som delas vid körning)

När du använder denna teknik kommer ett delat bibliotek under körningen att läsas in för att bitmappen ska bli tillgänglig för andra SWF-filer. I klassen ApplicationDomain sparas alla definitioner som har lästs in och de görs tillgängliga under körningen med metoden getDefinition() .

Ett bibliotek som delas vid körningen kan även innehålla all kodlogik. Hela programmet kan uppdateras under körningen utan att omkompilering krävs. I följande kod läses ett delat bibliotek in under körningen och definitionen som finns i SWF-filen hämtas under körningen. Denna teknik kan användas för teckensnitt, bitmappar, ljud eller för andra ActionScript-klasser:

// 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."); 
}

Det blir enklare att hämta definitionen om du läser in klassdefinitionerna i den inlästa SWF-filens programdomän:

// 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."); 
}

Nu kan klasserna som är tillgängliga i den inlästa SWF-filen användas när du anropar metoden getDefinition() i den aktuella programdomänen. Du får även tillgång till klasserna genom att anropa metoden getDefinitionByName() . Med den här tekniken sparar du bandbredd eftersom teckensnitt och stora resurser endast läses in en gång. Resurser exporteras aldrig i någon annan SWF-fil. Den enda begränsningen är att programmet måste testas och köras genom filen loader.swf. Den här filen läser först in resursen och därefter de olika SWF-filerna som programmet består av.