Es parte de una Clase que estaba haciendo: el típico banner de imágenes con una transición _alfa en cada imagen
Aviso que le faltan cosas como, p.e. hacerlo Clase, y aviso que es un "tocho".
Al final del todo, en la función removeImage, llamo al "garbage recolector"
Código ActionScript :
package
{
import fl.transitions.Tween;
import fl.transitions.TweenEvent;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.DisplayObject;
import flash.display.Sprite;
import flash.events.Event;
import flash.display.Loader;
import flash.display.LoaderInfo;
import flash.net.URLRequest;
import flash.net.URLLoader;
import flash.events.IOErrorEvent;
import fl.transitions.Tween;
import fl.transitions.easing.Elastic;
import fl.transitions.easing.None;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.system.System;
public class Banner extends Sprite
{
private var actual:DisplayObject;
private var activo:DisplayObject;
private var galeriaXML:XML=new XML();
private var index:Number = 0;
private var loader:Loader;
private var myTween:Tween;
private var myTween2:Tween;
public function Banner()
{
var loaderXML:URLLoader = new URLLoader();
loaderXML.addEventListener(Event.COMPLETE, completeHandlerXML);
loaderXML.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
var request:URLRequest = new URLRequest("galeria.xml");
loaderXML.load(request);
loader = new Loader();
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler,false,0,true);
loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler,false,0,true);
}
public function buscarImagen(url:String):void
{
var request:URLRequest = new URLRequest(url);
loader.load(request);
}
private function completeHandlerXML(event:Event):void {
var loader:URLLoader = URLLoader(event.target);
galeriaXML = new XML(loader.data);
buscarImagen(galeriaXML.imagen[index].@url);
}
private function completeHandler(event:Event):void {
activo = DisplayObject(addChild(loader.content));
myTween= new Tween(activo, "alpha", None.easeNone, 0, 1, 1, true);
myTween.addEventListener(TweenEvent.MOTION_FINISH, pausarImagen,false,0,true);
if (actual)
{
myTween2= new Tween(actual, "alpha", None.easeNone, 1, 0, 1, true);
myTween2.addEventListener(TweenEvent.MOTION_FINISH, removeImage,false,0,true);
}
loader.unload();
}
public function pausarImagen(e:Event):void
{
var myTimer:Timer = new Timer(500, 1);
myTimer.addEventListener("timer", nextImage,false,0,true);
myTimer.start();
}
private function ioErrorHandler(event:IOErrorEvent):void {
trace("Fichero no encontrado");
}
private function nextImage(e:Event):void
{
index++;
index %= galeriaXML.elements("imagen").length();
buscarImagen(galeriaXML.imagen[index].@url);
actual = activo;
trace(System.totalMemory.toString());
}
private function removeImage(e:Event):void
{
var tween:Tween = (Tween)(e.target);
var bitmap:Bitmap = Bitmap(tween.obj);
bitmap.bitmapData.dispose();
removeChild(bitmap);
//<----AQUI-----//
//si comentamos la línea veremos que la memoria va aumentando
System.gc.call();
}
}
}
El fichero XML es de la forma
Código :
<galeria>
<imagen id="0" url="images/img01.jpg"/>
<imagen id="1" url="images/img02jpg"/>
<imagen id="2" url="images/img03.jpg"/>
<imagen id="3" url="images/img04.jpg"/>
<imagen id="4" url="images/img05.jpg"/>
</galeria>