Conteúdo externo

Divida seu aplicativo em vários arquivos SWF.

Dispositivos móveis podem ter acesso limitado à rede. Para carregar seu conteúdo rapidamente, divida seu aplicativo em vários arquivos SWF. Tente reutilizar a lógica e os ativos de código em todo o aplicativo. Por exemplo, considere um aplicativo que tenha sido dividido em vários arquivos SWF, conforme mostrado no seguinte diagrama:

Aplicativo dividido em diversos arquivos SWF

Neste exemplo, cada arquivo SWF contém sua própria cópia do mesmo bitmap. Essa duplicação pode ser evitada pelo uso de uma biblioteca compartilhada no tempo de execução, como ilustrado no diagrama a seguir:

Utilizando uma biblioteca compartilhada de tempo de execução

Com o uso dessa tecnologia, uma biblioteca compartilhada em tempo real é carregada para disponibilizar o bitmap para os outros arquivos SWF. A classe ApplicationDomain armazena todas as definições de classe que tiverem sido carregadas e as disponibiliza no tempo de execução por meio do método getDefinition() .

Uma biblioteca compartilhada no tempo de execução também pode conter toda a lógica do código. Todo o aplicativo pode ser atualizado no tempo de execução, sem a necessidade de recompilação. O código a seguir carrega uma biblioteca compartilhada em tempo de execução e extrai a definição contida no arquivo SWF no tempo de execução. Essa técnica pode ser usada com fontes, bitmaps, sons ou qualquer 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."); 
}

A obtenção da definição pode ser facilitada pelo carregamento das definições de classe no domínio do aplicativo do arquivo SWF:

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

Agora as classes disponíveis no arquivo SWF carregado podem ser usadas chamando-se o método getDefinition() no domínio do aplicativo atual. Também é possível acessar as classes chamando o método getDefinitionByName() . Essa técnica economiza largura de banda por carregar fontes e grandes ativos somente uma vez. Os ativos nunca são exportados em nenhum outro arquivo SWF. A única limitação é que o aplicativo precisa ser testado e executado por meio do arquivo loader.swf. Esse arquivo carrega os ativos primeiro e, em seguida, carrega os diferentes arquivos SWF que compõem o aplicativo.