2009-09-07 59 views
1

我正在从一个主要的swf加载/卸载多个swfs。当我打开一个新的SWF我做这样的事情:removeChildAt()是否清除cpu资源?

contentContainer.addChild(the new swf); //add the new swf 
contentContainer.swapChildrenAt(0,1); 
contentContainer.removeChildAt(1); //remove the previous swf 

我的问题是,当我removeChildAt(),不老的SWF继续“打”,并保持占用CPU资源?我怎样才能完全杀死它?如果旧SWF中有音频或视频,它在移除后似乎仍在继续播放。

回答

0

你可能想尝试这样的:

var mc:MovieClip = contentContainer.removeChildAt(1) as MovieClip; 
mc.stop(); 

或做一些公共停车()嵌入在卸载SWF电影的方法。 (ref

您可能需要一些变化。

此外,如果您可以,您还可以让子swf侦听Event.ADDED_TO_STAGE,Event.REMOVED_FROM_STAGE事件。让它们在这个意义上控制自己可能更有意义,而不是依靠父容器来阻止它们。

+0

倾听REMOVED_FROM_STAGE是一个很好的解决方案。谢谢。 – sol

+0

这实际上并没有回答这个问题。即使你从舞台上移除MC并阻止他们,他们仍会继续记忆直到他们被垃圾收集。这里唯一的答案是跟踪你的参考,并确保你的剪辑将得到正确的GC。 – fenomas

+0

问题是CPU资源。不是记忆。而AFAIK,除了清除所有变量引用和交叉手指之外,没有办法调用GC。 – Glenn

1
+0

只要您部署到Flash Player 10(或更高版本),Loader.unloadAndStop就是您所需要的, –