Divisez l’application en plusieurs fichiers SWF.
Les périphériques mobiles ont parfois un accès limité au réseau. Pour charger rapidement le contenu, divisez l’application en plusieurs fichiers SWF. Si possible, réutilisez la logique de programmation et les actifs dans l’ensemble de l’application. Imaginons, par exemple, une application divisée en plusieurs fichiers SWF, comme illustré ci-après :
Application divisée en plusieurs fichiers SWF
Dans cet exemple, chaque fichier SWF contient sa propre copie d’un même bitmap. Il est possible d’éviter cette duplication en utilisant une bibliothèque partagée à l’exécution, comme illustré ci-dessous :
Utilisation d’une bibliothèque partagée à l’exécution
Une bibliothèque partagée à l’exécution est chargée pour que tous les autres fichiers SWF aient accès au bitmap. La classe ApplicationDomain stocke toutes les définitions de classe chargées et les met à disposition, lors de l’exécution, par le biais de la méthode
getDefinition()
.
Une bibliothèque partagée à l’exécution peut également contenir toute la logique de programmation. Il est possible de mettre à jour l’application tout entière sans la recompiler. Le code suivant charge une bibliothèque partagée à l’exécution et extrait la définition que contient le fichier SWF lors de l’exécution. Vous pouvez appliquer cette technique aux polices, bitmaps, sons ou toute 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.");
}
Pour faciliter l’extraction de la définition, chargez les définitions de classe dans le domaine d’application du fichier SWF concerné :
// 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.");
}
Pour utiliser les classes que contient le fichier SWF chargé, il suffit maintenant d’appeler la méthode
getDefinition()
sur le domaine d’application actif. Vous pouvez également accéder aux classes par appel de la méthode
getDefinitionByName()
. Parce qu’elle charge les polices et les actifs de grande taille une seule fois, cette technique permet d’économiser de la bande passante. Les actifs ne sont jamais exportés dans d’autres fichiers SWF. Une seule restriction : il est nécessaire de tester et d’exécuter l’application par le biais du fichier loader.swf. Ce fichier charge d’abord les actifs, puis les différents fichiers SWF qui constituent l’application.