2012-11-14 52 views
0

我的空中应用程序一直播放外部swf,直到播放下一个外部swf。为了避免内存泄漏,我使用了unloadAndStop()。我正在使用两个定时器。第一个unloadAndStops swf。第二秒钟等待两秒钟,然后重新加载它。as3 air unloadAndStop()事件监听器或计时器

这种方法(加上使用弱引用)似乎可以保持内存不受影响。然而,我宁愿不使用计时器,但事件监听器。是否有一个事件监听器,当unloadAndStop完成时再次加载swf。

这是我脑子里想的:

var TIMER_INTERVAL:int = int(duration); 
var t:Timer = new Timer(TIMER_INTERVAL); 
t.addEventListener(TimerEvent.TIMER,updateTimer,false,0,true); 
t.start(); 

private function updateTimer(e:TimerEvent):void 
{ 
    swfLoader.unloadAndStop(true);  
    swfLoader.addEventListener(Event.UNLOAD,onSWFUnloadComplete,false,0,true); 
} 

private function updateTimer(e:TimerEvent):void 
{ 
    var swfSource2:String = File.applicationStorageDirectory.nativePath.toString(); 
    swfLoader.load(swfSource2+'\\'+name_xml); 
} 
+1

'unloadAndStop'不是一个异步方法,所以卸载事件是不合适的。 – BadFeelingAboutThis

+0

感谢您的回应。如果unloadAndStop是同步的,那么为什么没有函数{swfLoader.unloadAndStop(true); swfLoader.load(swfSource2 +'\\'+ name_xml);}更好地管理内存? – complexi

+0

你能更具体吗? – BadFeelingAboutThis

回答

1

unloadAndStop不是异步方法,所以卸载事件不会真的是相关的。幕后可能发生的情况是,需要1个完整帧才能完全处理电影对象/听众,这就是为什么您在重新加载同一代码块时遇到问题的原因。

如果在再次加载之前等待一帧,则应该获得预期的结果。

现在,最好的解决方案是进入加载的swf的源文件并修复内存泄漏。