如何获得的Flex的SWFLoader unloadAndStop也卸载声音?(How to get

2019-10-18 01:29发布

public var swfLoader:SWFLoader = new SWFLoader();

[Embed(source="/some/file1.swf")]
public var file1:Class;

[Embed(source="/some/file2.swf")]
public var file2:Class;

然后我做的:

swfLoader.load(file1);

稍后的:

swfLoader.unloadAndStop(true);

其卸载视频,但没了声音! 所以我加入

SoundMixer.stopAll();

这是好的,一会儿。 后来,我做的:

swfLoader.load(file2);

而最终,一边看文件2,文件1的音频会在后台启动了文件2的音频播放,没有办法阻止它! 什么是正确的方式来阻止文件1的声音? 我一直看到的方式是我使用使用unloadAndStop()。 除非我必须创建一个新的SWFLoader每次都反对呢?

按下面康拉德的回答,我应该停止播放声音在清理活动,如REMOVED_FROM_STAGE,但是,我怎么能停止播放声音上装有一个的SWFLoader的SWF文件? 我没有看到一个明显的方式来做到这一点。

Answer 1:

解决方案是有点棘手,因为问题是加载内容。

垃圾收集器将不会删除的声音,因为它仍然在播放器(其由Flash Player参考),但你没有访问它的声音通道(因为它隐藏在类类似于私有变量)。 这行为是完全正确的。

解决方案:在加载的SWF文件的代码,你应该停止播放声音(在REMOVED_FROM_STAGE或其他“清理”的事件处理程序)。 其他解决方案(如SoundMixer.stopAll)会在某些情况下工作,但不是在所有。

我们常常忘记我们的应用程序后清洗。 如果存在相同的Flash Player实例它不是问题(去掉它会清理我们的SWF使用的所有内存)。 问题开始时,我们加载和卸载的SWF。 忽略清理是快速的方式内存泄漏。



Answer 2:

swfLoader.unloadAndStop(真);

是否删除SWF和声音为好。 对我来说工作正常。 即使文件说:卸载图像或SWF文件。 此方法返回之后,source属性将为空。 这如果Flash Player的主版本10或更高时,才支持。 如果Flash Player的主版本低于10,则此方法卸载内容的方式,就好像源设置为null相同。 此方法尝试通过删除引用此事件,的NetConnection,定时器,声音,或子SWF文件的视频对象卸载SWF文件。 其结果是,以下的子SWF文件和子SWF文件的显示列表将发生: 停止声音。 舞台事件侦听器将被删除。 为enterFrame事件,frameConstructed,exitFrame,激活和关闭事件侦听器将被删除。 停止计时器。 摄像头和麦克风实例分离停止影片剪辑。



文章来源: How to get Flex SWFLoader unloadAndStop to unload sound also?