Contenido externo

Divida la aplicación en varios archivos SWF.

Los dispositivos móviles pueden tener acceso limitado a la red. Para cargar el contenido rápidamente, divida la aplicación en varios archivos SWF. Intente reutilizar la lógica y los recursos en toda la aplicación. Por ejemplo, considere una aplicación que se haya dividido en varios archivos SWF, tal y como se muestra en el siguiente diagrama:

Aplicación dividida en varios archivos SWF.

En este ejemplo, cada archivo SWF contiene su propia copia del mismo mapa de bits. Esta duplicación se puede evitar utilizando una biblioteca compartida en tiempo de ejecución, tal y como se muestra en el siguiente diagrama:

Uso de una biblioteca compartida en tiempo de ejecución.

Con el uso de esta técnica, una biblioteca compartida en tiempo de ejecución se carga para que el mapa de bits esté disponible para los demás archivos SWF. La clase ApplicationDomain almacena las definiciones de clase que se hayan cargado y las hace disponibles en tiempo de ejecución a través del método getDefinition() .

Una biblioteca compartida en tiempo de ejecución también puede incluir toda la lógica del código. Toda la aplicación puede actualizarse en tiempo de ejecución sin tener que volver a realizar la compilación. El siguiente código carga una biblioteca compartida en tiempo de ejecución y extrae la definición incluida en el archivo SWF en tiempo de ejecución. Esta técnica se puede utilizar con fuentes, mapas de bits, sonidos o cualquier clase de 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."); 
}

La obtención de la definición se puede facilitar cargando las definiciones de clase en el dominio de la aplicación del archivo SWF de carga:

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

Las clases disponibles en este momento en el archivo SWF cargado se pueden utilizar llamando al método getDefinition() en el dominio de la aplicación actual. También se puede acceder a las clases llamando al método getDefinitionByName() . Con esta técnica se ahorra ancho de banda cargando fuentes y recursos de gran tamaño sólo una vez. Los recursos no se exportan nunca en otros archivos SWF. La única limitación es que la aplicación se debe probar y ejecutar mediante el archivo loader.swf. Este archivo carga los recursos en primer lugar y, a continuación, carga los archivos SWF diferentes que conforman la aplicación.