如何从Adobe Flex中的SWFLoader组件卸载外部加载的SWF文件?

Sha*_*awn 3 apache-flex air adobe swfloader

我有一个应用程序加载外部SWF文件,并通过SWFLoader Flex组件在Adobe Flex/Air应用程序中播放它们.我一直试图找到一种从按钮点击事件中卸载它们的方法.我已经远远超过谷歌了,似乎没有人能够在没有黑客的情况下做到这一点.我看到人们使用的代码组合是:

swfLoader.source = ""; // Removes the external link to the SWF.
swfLoader.load(null); // Forces the loader to try to load nothing.
// Note: At this point sound from the SWF is still playing, and
// seems to still be playing in memory.
flash.media.SoundMixer.stopAll();
// Stops the sound. This works on my development machine, but not 
// on the client's.
Run Code Online (Sandbox Code Playgroud)

如果SWF以这种方式关闭(隐藏),最终程序崩溃.

有任何想法吗?我在各种论坛上发现了很多帖子,人们遇到了同样的问题.我想我会在这里得到一个错误/不完整的答案,而且我的帖子会像往常一样陷入虚无,但无论哪种方式,都要提前感谢!

编辑1:我无法编辑实际的SWF电影,它们是由客户端创建的.如果我无法关闭通过Flex打开的任何SWF,那么Flex架构不是一个问题吗?我唯一的选择是将SWF发送到网络浏览器吗?

aaa*_*dan 6

...这不是Flex架构的问题吗?

是的,它也会影响Flash.在您可以利用FP10(AIR 1.5)中的Loader.unloadAndStop()方法之前,您无法保证外部加载的内容不会继续消耗内存和CPU资源,即使您使用该Loader.unload()方法也是如此.(说实话,我不是百分百肯定,即使这样也可以保证释放资源,但也许我是一个悲观主义者.)

下一个最好的事情是你要坚持你加载的内容的创建者遵守一套准则,包括暴露dispose()你的应用程序可以调用的方法,让它在你之前尽可能多地释放资源unload().如果这是不可能的,那么每次加载外部swf时,你的应用程序几乎肯定会在内存和cpu使用方面臃肿.抱歉.

如果它让你感觉更好,那么你并不孤单.;)