1

我有一个加载外部 SWF 文件的简单可扩展广告。外部 SWF 文件包含嵌入的视频。

使用 UILoader 组件,我已加载 SWF,将其添加到舞台,视频显示和播放正常。

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

要卸载 SWF,我正在执行以下操作:

myUILoader.unload();
removeChild(myUILoader);

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

4

1 回答 1

1

有几件事可能导致这种情况。一是你的 UILoader 内的内容正在向其自身外部添加事件侦听器。你可以通过不允许它接触任何外部的东西来解决这个问题。我相信您可以通过将其放置在自己的 ApplicationDomain、SecurityDomain 或两者中来做到这一点。有关更多详细信息,请参阅帮助。

如果这不可行,您可以尝试 SoundMixer.stopAll(),它会停止明显的症状,但不会修复您在这种情况下可能遇到的内存泄漏。

正如 Ronnie 所暗示的,另一种可能性是您仍然在某处引用了加载程序的内容。如果你不清除它,它将留在内存中。

但是,还有另一个问题也可能导致此问题,即如果电影中的导航跳过包含音频设置为“流”的 MovieClip 的帧,则将创建 MC 但未完全实例化,并将留在内存中,无法控制或释放它。从您的描述中,我认为这不是正在发生的事情。如果是,解决方法是确保您在前往另一帧的途中访问包含声音的帧,无论多么短暂。实际上,即使没有声音,您也可能需要考虑这一点,因为它确实会在您跳过嵌套的 MovieClip 中的帧时发生(除非您分析 swf,否则您没有证据),并且随着时间的推移,这将导致内存泄漏。

于 2012-08-07T00:02:52.333 回答