2012-08-06 98 views
1

我有一个简单的可扩展广告,它加载了一个外部SWF文件。外部SWF文件包含嵌入的视频。AS3 UILoader SWF在后台继续播放

使用UILoader组件,我已经加载了SWF,将它添加到舞台上,并且视频显示并播放正常。

主要问题是我有一个关闭按钮,它应该卸载视频,并停止它,基本上返回到广告的默认状态。

要卸载SWF,我做了以下内容:

myUILoader.unload(); 
removeChild(myUILoader); 

当我做到这一点,视频和UILoader的从屏幕上消失。但是,您仍然可以在背景中听到声音,并且如果我再次加载SWF,它会在后台创建多个轨道。有什么建议么?

+0

如果将'myUILoader'设置为空,会发生什么?你真正应该做的是在你加载的SWF中,编辑代码并添加一个Event.REMOVED_FROM_STAGE事件来处理停止所有必要的声音/视频。 – Ronnie 2012-08-06 21:48:16

回答

1

有几件事情可能导致这种情况。一个是你的UILoader内部的内容是将事件监听器添加到它自己之外。你可以通过不让它触及任何东西来解决这个问题。我相信你可以通过将它放在它自己的ApplicationDomain,SecurityDomain或两者中来实现。请参阅帮助以了解更多详情。

如果这是不可行的,你可以尝试SoundMixer.stopAll(),它会停止明显的症状,但不会解决你在这种情况下可能发生的内存泄漏问题。

Ronnie指出的另一种可能性是,你仍然可以在某处引用装载器的内容。如果你不清楚,它会留在记忆中。

但是,还有另一个问题也可能导致这种情况,即如果在电影中存在导航而跳过包含音频设置为“流”的MovieClip的帧,则将创建MC,但不会完全实例化,并将留在内存中,无法控制它或释放它。我不认为这是你描述中发生的事情。如果是这样,修复方法是确保您访问包含声音的帧,但是简要地说,在到另一帧的路上。实际上,即使没有声音,也可能需要考虑这一点,因为每当您跳过嵌套的动画片段中的帧时就会出现这种情况(除非您分析swf,否则您只是没有证据),随着时间的推移,这会造成内存泄漏。