2012-11-14 58 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的源文件並修復內存泄漏。