Treść zewnętrzna

Aplikację należy podzielić na wiele plików SWF.

Urządzenia mobilne mogą mieć ograniczony dostęp do sieci. W celu szybkiego załadowania treści należy podzielić aplikację na wiele plików SWF. Należy dążyć do wielokrotnego używania fragmentów kodu i zasobów w całej aplikacji. Na przykład: rozważmy aplikację, która została podzielona na wiele plików SWF, co przedstawia poniższy diagram.

Aplikacja podzielona na wiele plików SWF

W tym przykładzie każdy plik SWF zawiera własną kopię tej samej bitmapy. Takiemu powielaniu można zapobiegać poprzez korzystanie z biblioteki RSL (Runtime Shared Library), co prezentuje poniższy diagram:

Użycie wspólnej biblioteki wykonawczej (RSL)

Gdy używana jest ta technika, biblioteka RSL zostaje załadowana w celu udostępnienia bitmapy innym plikom SWF. Klasa ApplicationDomain zawiera wszystkie definicje klas, które zostały załadowane, i udostępnia je w środowisku wykonawczym za pośrednictwem metody getDefinition() .

Biblioteka RSL może również zawierać całą logikę realizowaną przez kod. Cała aplikacja może zostać zaktualizowana w środowisku wykonawczym bez konieczności rekompilacji. Poniższy kod ładuje bibliotekę RSL i wyodrębnia definicję zawartą w pliku SWF w środowisku wykonawczym. Ta technika może być stosowana z czcionkami, bitmapami, dźwiękami lub dowolnymi klasami 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."); 
}

Uzyskanie definicji może być łatwiejsze poprzez załadowanie definicji klasy w domenie aplikacji ładowanego pliku 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."); 
}

Klasy dostępne w załadowanym pliku SWF mogą być używane poprzez wywołanie metody getDefinition() w bieżącej domenie aplikacji. Dostęp do klas można również uzyskać poprzez wywołanie metody getDefinitionByName() . Ta technika zmniejsza obciążenie łącz, ponieważ czcionki i duże zasoby są ładowane tylko raz. Zasoby nie są nigdy eksportowane w żadnych innych plikach SWF. Jedynym ograniczeniem jest to, że aplikacja musi zostać przetestowana i być uruchamiana za pośrednictwem pliku loader.swf. Ten plik najpierw ładuje zasoby, a następnie ładuje różne pliki SWF, które składają się na aplikację.