Contenuto esterno

Dividete l'applicazione in più file SWF.

I dispositivi mobili possono avere un accesso limitato alla rete. Per caricare rapidamente il vostro contenuto, dividete l'applicazione in più file SWF. Cercate di riutilizzare la logica del codice e le risorse in tutta l'applicazione. Ad esempio, considerate un'applicazione che è stata divisa in più file SWF, come quella raffigurata nel diagramma seguente:

Applicazione divisa in più file SWF

In questo esempio, ogni file SWF contiene una copia distinta della stessa bitmap. Questa duplicazione può essere evitata utilizzando una libreria condivisa in runtime, come illustrato dal diagramma seguente:

Utilizzando una libreria condivisa in runtime

In base a questa tecnica, una libreria condivisa in runtime viene caricata per rendere disponibile la bitmap agli altri file SWF. La classe ApplicationDomain include tutte le definizioni di classe che sono state caricate e le rende disponibili in runtime tramite il metodo getDefinition() .

Una libreria condivisa in runtime può anche contenere tutta la logica del codice. L'intera applicazione può così essere aggiornata in runtime senza che sia necessario ricompilarla. Il codice seguente carica una libreria condivisa in runtime ed estrae la definizione contenuta nel file SWF in fase di runtime. Questa tecnica può essere utilizzata con i font, le bitmap, i suoni o qualsiasi classe ActionScript:

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

Per facilitare l'estrazione della definizione, è possibile caricare le definizioni di classe nel dominio applicazione del file SWF che esegue il caricamento:

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

Ora le classi disponibili nel file SWF caricato possono essere utilizzate chiamando il metodo getDefinition() sul dominio applicazione corrente. Potete accedere alle classi anche chiamando il metodo getDefinitionByName() . Questa tecnica permette di risparmiare banda caricando i font e le risorse più grandi una sola volta. Le risorse non vengono mai esportate in altri file SWF. L'unica limitazione consiste nel fatto che l'applicazione deve essere testata ed eseguita mediante il file loader.swf. Questo file carica prima le risorse, quindi carica i vari file SWF che compongono l'applicazione.