0

Air アプリケーションは、次の外部 SWF を再生するまで、外部 SWF を何度も再生します。メモリ リークを避けるために、unloadAndStop() を使用しています。私は2つのタイマーを使用しています。最初の unloadAndStops は swf です。2 番目は 2 秒間待ってから、再度ロードします。

このアプローチ(弱参照の使用と相まって)は、メモリを抑制しているようです。ただし、タイマーではなくイベントリスナーを使用したいと思います。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);
}
4

1 に答える 1

1

unloadAndStopは非同期メソッドではないため、unload イベントは実際には関係ありません。舞台裏で起こっている可能性があるのは、ムービー オブジェクト/リスナーを完全に破棄するのに 1 フレームかかることです。そのため、同じコード ブロックで再度ロードする際に問題が発生しています。

再度ロードする前に 1 フレームだけ待っていれば、期待どおりの結果が得られるはずです。

もちろん、最善の解決策は、ロードした swf のソース ファイルを調べて、メモリ リークを修正することです。

于 2012-11-14T19:32:40.320 に答える