AS3 – Cosas que se deben hacer antes de descargar un swf

Publicado por Iván Gajate el 11 de enero de 2009 en AS3, Flash

Un listado muy completo por Colin Moock para evitar problemas con el garbage collector en AS3 al descargar un swf. Via Moock Blog.

Things You Must Do Before Unloading a SWF File

If you load a .swf file into Flash Player 9 with ActionScript 3.0 and subsequently wish to remove it from memory, you must first deactivate it, and then dereference it. If you dereference the .swf without deactivating it, it will continue to consume resources and in some cases might never become eligible for garbage collection.

Here is an unofficial list of tasks required to deactivate a .swf file:

  • Tell any loaded .swf child assets to disable themselves.
  • Stop any sounds from playing.
  • Stop the main timeline, if it is currently playing.
  • Stop any movie clips that are currently playing.
  • Close any connected network objects, such as instances of Loader, URLLoader, Socket, XMLSocket, LocalConnection, NetConnections, and NetStream.
  • Release all references to cameras and microphones.
  • Unregister all event listeners in the .swf (particularly Event.ENTER_FRAME, and mouse and keyboard listeners)
  • Stop any currently running intervals (via clearInterval()).
  • Stop any Timer objects (via the Timer class’s instance method stop()).

Note that the preceding list is, by definition, insufficient because it is neither exhaustive nor officially maintained by Adobe. If you know of a task that needs adding to the preceding list, please sent it to me via email (username colin, domain moock.org).

As of Flash Player 10, the preceding tasks can be performed automatically by calling the Loader class’s new method unloadAndStop().

For further discussion, see Charge #2 in my Inside RIA article, The Charges Against ActionScript 3.0 and Grant Skinner’s article Additional Information on Loader.unloadAndStop().

 

15 comentarios para “AS3 – Cosas que se deben hacer antes de descargar un swf”

  1. Si, el garbage collector es de las cosas que te puede volver loco en un proyecto, y si curras con 7mil lineas de codigo ni te cuento………

    Pero bueno, en la uni siempre nos enseñaron a destruir lo creado, excepto java o C# que tienen un recolector maravilloso….. eso si, al loro cuando se reserven grandes cantidades de memoria, pq el recolector actua cuando se da cuenta que el objeto no es referenciado, y no inmediatamente.

    Teniendo en cuenta que actionscript era un sucedáneo de lenguaje de programación (y que lo sigue siendo aún, pero con una distancia mucho menor respecto a los lenguajes “serios”), sigue siendo una auténtica pasada a la hora de construir un interfaz gráfico (que fue lo que lo diferenció desde siempre) con un tiempo de desarrollo minimo.

    Hacer un mismo interfaz en java o c# requiere un tiempo de desarrollo para nada comparable con el de as….

    AS sigue aumentando su espectro de uso, pero para llegar a ser un lenguaje “canónico”……. podemos esperar sentados, y si algun dia lo es…… habrá que preparase muy muy a fondo, como para los demás lenguajes.

    Ale Iván, ya tienes mi primer comentario tocho 😛

    S2

  2. Si. Y es una pena porque la base es muy buena y estable, es como ir en una autopista hasta que te encuentras con una de estas cosas.

  3. Casi te sale más rentable dicerle al usuario que recargue la página en el navegador.

    Continuando con la “discusión” sobre AS3, estas son las cosas que no me gustan, a ver si las van puliendo. O por lo menos, que expliquen las cosas bien en la ayuda, porque por ejemplo lo de los textos dinámicos es de risa. Lo que ellos hacen en 2 lienas en la ayuda, necesita 5 lineas y 4 pasos en la realidad.