Приложение слишком велико, чтобы описывать его здесь, но я могу сказать, что у меня есть до 20 или более модулей, которые клиент может использовать в любое время.И если я продолжаю загружать экран за экраном, мое приложение может занимать 500 МБ и более.
Сценарий, который я использую для загрузки и выгрузки модулей:
public function createModule(modulo:String):void {
if(moduleLoader != null){
moduleLoader.unloadModule();
//moduleLoader.url = null;
moduleLoader.url = "com/oss/facturable/components/" + modulo + "?version=" + model.configXML.versionApp;
moduleLoader.loadModule();
}
}
private function errorHandler(e:ModuleEvent):void {
Alert.show("No se ha podido cargar el modulo. Contacte al departamento técnico.");
}
Контейнер, в котором находитсязагружен модуль:
<s:BorderContainer width="98%" height="98%" includeIn="mainState" styleName="bcModuleLoader" top="100">
<s:layout>
<s:HorizontalLayout paddingLeft="10" paddingRight="10" paddingTop="10" paddingBottom="10"/>
</s:layout>
<s:Scroller width="100%" height="100%">
<s:Group>
<mx:ModuleLoader id="moduleLoader" error="errorHandler(event)" width="100%" height="100%" horizontalAlign="center" verticalAlign="top" creationComplete="createModule('bandejaEntrada.swf')"/>
</s:Group>
</s:Scroller>
</s:BorderContainer>
Функция createModule вызывается всякий раз, когда я щелкаю по пункту меню, который я считаю неуместным размещать здесь.В общем, это все, что у меня есть сейчас, чтобы заставить его работать и течь: S
Это официальная функция unloadModule, я подумал, что, судя по всему, память должна быть хорошо распределена с этимвещь, я имею в виду, смотри!Он удаляет все eventListeners и дочерние объекты.Почему моя память остается неизменной при выгрузке и загружает больше памяти, когда я открываю новый модуль ?!Ауг!
public function unloadModule():void
{
if (child)
{
removeChild(child);
child = null;
}
if (module)
{
module.removeEventListener(ModuleEvent.PROGRESS,
moduleProgressHandler);
module.removeEventListener(ModuleEvent.SETUP, moduleSetupHandler);
module.removeEventListener(ModuleEvent.READY, moduleReadyHandler);
module.removeEventListener(ModuleEvent.ERROR, moduleErrorHandler);
module.unload();
module.removeEventListener(ModuleEvent.UNLOAD, moduleUnloadHandler);
module = null;
}
}