Ok, I went ahead and added some manual clean up to the swf's I was
loading using Event.UNLOAD. I'm basically setting values to null so
they become candidates for garbage collection. Regardless, each time I
load a file into SWFLoader the mem usage still jumps until the app
becomes sluggish and ultimately unresponsive. I noticed the following
bug (http://bugs.adobe.com/jira/browse/SDK-13097) and I'm assuming
that is the issue I'm having.

As I workaround I'm loading a single swf into SWFLoader and then
having the loaded swf handle the loading of other external swf files
itself. The class for something like this is as such:

package {
        
        import flash.display.MovieClip;
        
        import flash.display.Loader;
        import flash.net.URLRequest;
        
        import flash.events.Event;
        import flash.events.ProgressEvent;
        
        public class LoaderSWF extends MovieClip{
        
        private var loader:Loader;
        
        public function LoaderSWF() : void {
                
                loader = new Loader();
                
                addChild(loader);
                
        }
        
        public function loadSWF(path){
                
                trace("loadSWF(", path, " )");
                
                var r:URLRequest = new URLRequest();
                r.url = path;
                
                
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,
progressHandler);
                loader.load(r);
                
        }
        
        private function progressHandler(event:ProgressEvent) : void {
                
        trace("bytesLoaded=" + event.bytesLoaded + " bytesTotal=" +
event.bytesTotal);
        
        }
        
        }
        
}


--- In flexcoders@yahoogroups.com, Alex Harui <[EMAIL PROTECTED]> wrote:
>
> Each SWF really should stop its own audio and clean up.  Trying to
clean up on a SWFs behalf is likely a maintenance issue.
> 
> From: flexcoders@yahoogroups.com [mailto:[EMAIL PROTECTED]
On Behalf Of djepyon
> Sent: Wednesday, September 10, 2008 8:01 AM
> To: flexcoders@yahoogroups.com
> Subject: [flexcoders] Re: SWFLoader unloading, whats the trick?
> 
> 
> Alex thanks for the additional info.
> 
> swfloader.content.stop() prior to setting a new source in this case
> managed to stop the next swf at the beginning once it loaded. Not sure
> why this happened.
> 
> I did a bit of testing here and as far as I can tell when a
> MovieClip's loaderInfo dispatches an Event.UNLOAD the MovieClip itself
> has already been de-referenced.
> 
> The timeline audio continues to play however. I've managed to fix this
> problem (although this seems a bit of a hack) by calling
> SoundMixer.stopAll() in the unload handler. I somehow doubt that this
> actually deletes the Sound objects that were created so my guess is
> that this could cause a big leak if many SWF's with timeline audio
> were being loaded over and over. Perhaps the same problem would
> persist even with SWF' with manually instantiated audio?
> 
> Here's my quick fix.
> 
>
MovieClip(event.target.content).loaderInfo.addEventListener(Event.UNLOAD,
> unloadHandler);
> 
> private function unloadHandler(event:Event) : void {
> 
> SoundMixer.stopAll();
> 
> }
> 
> --- In
flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>, Alex
Harui <aharui@> wrote:
> >
> > I haven't used this event to shut down a movie, so I don't have
> examples, but I think the recommended pattern is that the loaded SWF
> is supposed to listen for the UNLOAD event on its loaderInfo. If the
> main app is listening, then you're probably right that it is too late.
> Of course, if you're about to set the SWFLoader's source you can
> certainly call swfloader.content.stop() beforehand, but I think stop()
> doesn't stop Audio/Video, just the frame timeline. You'll have to
> have access to the loaded SWFs Sound instances which is why it is
> "better" if the loaded SWF cleans up after itself.
> >
> > From:
flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>
[mailto:flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>]
> On Behalf Of djepyon
> > Sent: Tuesday, September 09, 2008 8:35 PM
> > To: flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com>
> > Subject: [flexcoders] Re: SWFLoader unloading, whats the trick?
> >
> >
> > Thanks guys. The feedback I get on here is always great.
> >
> > I was able to listen for UNLOAD on the SWFLoader. I tried a
> > MovieClip(event.target.content).stop() but it seems that its already
> > disappeared at this point and throws a null object reference error.
> >
> > Listening on the content object didn't trigger the event handler.
> > Would it be better to use REMOVED or REMOVED_FROM_STAGE for this?
> >
> > Maybe I could get some sample code?
> >
> > --- In
>
flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>,
Alex
> Harui <aharui@> wrote:
> > >
> > > The SWFLoader unloads the SWF which just de-references the SWF bytes
> > but does not clear references to objects created by code in that SWF
> > which might be referenced by the player or other code, including
> > Timers, Video, Audio, player events, etc.
> > >
> > > In FP10, there is a new unloadAndStop method that will supposedly
> > clear this stuff out, but short of that, the child SWF should listen
> > for an UNLOAD event and stop Audio and do other cleanup.
> > >
> > > From:
>
flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
>
[mailto:flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>]
> > On Behalf Of Josh McDonald
> > > Sent: Tuesday, September 09, 2008 4:48 PM
> > > To:
flexcoders@yahoogroups.com<mailto:flexcoders%40yahoogroups.com><mailto:flexcoders%40yahoogroups.com>
> > > Subject: Re: [flexcoders] SWFLoader unloading, whats the trick?
> > >
> > > IIRC, any loaded SWF that's no longer referenced will be garbage
> > collected (and fairly quickly from my experience), but streaming audio
> > (or video) is still referenced by the player so it doesn't go
anywhere.
> > >
> > > -Josh
> > > On Wed, Sep 10, 2008 at 9:40 AM, djepyon <ian@<mailto:ian@>>
> > wrote:
> > > Does SWFLoader unload itself when you set a new source path?
Then why
> > > does timeline audio thats set to "stream" in the swf still
continue to
> > > play? Can give me the skinny on properly unloading a SWFLoader? Thx.
> > >
> > >
> > > ------------------------------------
> > >
> > > --
> > > Flexcoders Mailing List
> > > FAQ:
http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
> > > Search Archives:
> > http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! Groups
> > Links
> > >
> > >
> > >
> > >
> > >
> > > --
> > > "Therefore, send not to know For whom the bell tolls. It tolls for
> > thee."
> > >
> > > http://flex.joshmcdonald.info/
> > >
> > > :: Josh 'G-Funk' McDonald
> > > :: 0437 221 380 :: josh@<mailto:josh@>
> > >
> >
>


Reply via email to