
Uygulamanızı birden fazla SWF dosyasına bölün.
Mobil cihazların ağa sınırlı erişimi olabilir. İçeriğinizi hızlı yüklemek için, uygulamanızı birden fazla SWF dosyasına bölün. Uygulamanın tamamında kod mantığını ve varlıkları yeniden kullanmaya çalışın. Örneğin, aşağıdaki şemada gösterildiği gibi, birden fazla SWF dosyasına bölünmüş bir uygulama düşünün.
Birden çok SWF dosyasına bölünen uygulama
Bu örnekte, her SWF dosyası aynı bitmap için kendi kopyasını içerir. Aşağıdaki şemanın gösterdiği gibi, bu çoğaltılma bir çalışma zamanı paylaşımlı kütüphane kullanılarak önlenebilir.
Çalışma zamanı paylaşılan kütüphane kullanma
Bu teknik kullanılarak, bitmap’in diğer SWF dosyaları tarafından kullanılabilir hale getirilmesi için bir çalışma zamanı paylaşımlı kütüphane yüklenir. ApplicationDomain sınıfı yüklenen tüm sınıf tanımlarını saklar ve onları
getDefinition()
yöntemi üzerinden çalışma zamanında kullanılabilir hale getirir.
Ayrıca, bir çalışma zamanı paylaşımlı kütüphane kod mantığının tamamını içerebilir. Uygulamanın tamamı yeniden derlenmeden çalışma zamanında güncellenebilir. Aşağıdaki kod bir çalışma zamanı paylaşımlı kütüphane yükler ve çalışma zamanında SWF dosyasına dahil edilen tanımı çıkarır. Bu teknik fontlar, bitmap'ler, sesler veya herhangi bir ActionScript sınıfıyla kullanılabilir.
// 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.");
}
Tanımın alınması yüklenen SWF dosyasının uygulama etki alanına sınıf tanımlarının yüklenmesiyle daha kolay hale getirilebilir.
// 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.");
}
Yüklü SWF dosyasında mevcut olan sınıflar artık geçerli uygulama etki alanındaki
getDefinition()
yöntemi çağrılarak kullanılabilir. Ayrıca, sınıflara
getDefinitionByName()
yöntemini çağırarak da erişebilirsiniz. Bu teknik fontları ve büyük varlıkları yalnızca bir kere yükleyerek bant genişliğinden tasarruf sağlar. Varlıklar hiçbir zaman diğer SWF dosyalarına dışa aktarılmaz. Tek kısıtlama uygulamanın test edilmesinin ve loader.swf dosyası üzerinden çalıştırılmasının gerekliliğidir. Bu dosya önce varlıkları yükler, sonra da uygulamayı oluşturan farklı SWF dosyalarını yükler.