2009-09-07 30 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就是您所需要的, –