flash.display.Loader クラスを使用して、as3 で記述されたプログラムから swf ファイルをロードしています。FlashDevelop でデバッグ ビルド構成を使用している場合、すべて正常に動作します。しかし、リリース ビルド構成を使用している場合、ローダーが進行状況イベントを送信した後、完了イベントを送信する前に、プログラムが約 2 秒間フリーズします。
これは私のプログラムです:
package
{
import flash.display.Loader;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.ProgressEvent;
import flash.net.URLRequest;
import flash.system.LoaderContext;
import flash.system.ApplicationDomain;
import flash.text.TextField;
public class Main extends Sprite {
private var frameCounter:int;
private var frameCounterField:TextField = new TextField;
private var statusField:TextField = new TextField;
function Main():void {
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void {
removeEventListener(Event.ADDED_TO_STAGE, init);
addEventListener(Event.ENTER_FRAME, frame);
frameCounterField.text = "On frame " + frameCounter.toString();
addChild(frameCounterField);
statusField.y = 40;
statusField.width = 300;
addChild(statusField);
var context:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
var urlReq:URLRequest = new URLRequest("SomeFile.swf");
var loader:Loader = new Loader();
loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, onProgress);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
loader.load(urlReq, context);
}
private function frame(event:Event):void {
frameCounterField.text = "On frame " + (++frameCounter).toString();
}
private function onProgress(event:ProgressEvent):void {
statusField.appendText("Progress on frame: " + frameCounter.toString() +
" Loaded: " + event.bytesLoaded + " / " + event.bytesTotal + "\n");
}
private function onComplete(event:Event):void {
statusField.appendText("Completed on frame: " + frameCounter.toString() + "\n");
}
}
}
リリースでは、最初のフレームで次の出力が得られます。
On frame 1
Progress on frame: 1 Loaded: 0 / 182468
Progress on frame: 1 Loaded: 65536 / 182468
Progress on frame: 1 Loaded: 131072 / 182468
Progress on frame: 1 Loaded: 182468 / 182468
プログラムがフリーズする約 2 秒後に行Completed on frame: 2
が追加され、「フレーム X で」カウンターがカウントアップを開始します。デバッグ ビルドでも同じ出力が生成されますが、フリーズは発生しません。
ロードしようとしたすべてのswfファイルが問題を引き起こすわけではありません。ファイルのサイズは何にも影響していないようです。別のコンピューターでコンパイルして実行しようとしましたが、同じ結果が得られました。
この問題の原因は何ですか?
編集: プログラムが debug=true でコンパイルされている場合、フラッシュ プレーヤーの起動に約 2 秒かかることに気付きました。これは、debug=false の場合にフラッシュ プレーヤーがフリーズするのと同じ時間です。