垃圾收集AIR中的第三方SWF

时间:2012-07-30 10:43:54

标签: actionscript-3 flash flex air

考虑一个AIR应用程序,它可以一次加载任意数量的第三方SWF文件进行显示。像Web浏览器一样。

问题是这些SWF文件可能包含尚未删除的EventListener等。

Loader.unloadAndStop()是否足以垃圾收集这些SWF?

如果没有 - 是否有一种方法(对于每个SWF可能是一个新的NativeWindow,那么在完成后关闭NativeWindow。这会完全是GC吗?)

3 个答案:

答案 0 :(得分:2)

单独的本机窗口或在浏览器控件中加载可以是您无法控制的第三方SWF的一种方式。否则会增加很多开销。

不幸的是,您无法确保加载代码的正确沙盒(显示对象,最重要的是,舞台无法从加载的代码中隐藏)。如果加载的代码已经添加了一个监听器(如果你需要键盘事件,这是常见的事情),那么它就不会卸载。

然而,在SWF格式本身不同的移动设备上,这是不可能的。

答案 1 :(得分:0)

前段时间我遇到了与外部开发的组件类似的问题,我们没有源代码,它被夹在我们的应用程序中。我能做到/想到的最好的事情就是去做核工业所做的事情 - 当事情变得糟糕时,至少包含在具体内容中,因此它的传播范围不会超过

我的解决方案是建立一个'组件池',以便当被污染的对象被要求“干净”时,它们被放在一个单独的保存区域,以便在需要时重复使用 - 这样只需要创建所需的最小数量在跑步期间。

答案 2 :(得分:-1)

在GC之前,您应该创建一个公共静态函数来删除已加载的swf文件中的所有侦听器。