Я загружаю SWF-файл из моей программы, написанной на as3, используя класс flash.display.Loader. Когда я использую конфигурацию отладочной сборки во FlashDevelop, все работает нормально. Но когда я использую конфигурацию сборки выпуска, программа зависает примерно на две секунды после того, как загрузчик отправляет события хода выполнения и до отправки события завершения.
Это моя программа:
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
Примерно через две секунды после остановки программы добавляется строка Completed on frame: 2
, и счетчик «В кадре X» начинает увеличиваться. Отладочная сборка выдает тот же вывод, но без остановки.
Не все SWF-файлы, которые я пытался загрузить, вызывают проблему. Размер файла не влияет ни на что. Я попытался скомпилировать и запустить на другом компьютере с тем же результатом.
Что может вызвать эту проблему?
Редактировать: я заметил, что если программа скомпилирована с debug = true, запуск флеш-плеера занимает около двух секунд, то же самое время заморозки флеш-плеера при отладке = false.