Я нашел решение проблемы. Ключ был в том, чтобы перехватить событие preloader FlexEvent.INIT_PROGRESS, поставить его в очередь и остановить его распространение до полной загрузки конфигурации. Это эффективно останавливает платформу для продолжения инициализации приложения. После загрузки конфигурации перераспределите события в очереди, позволяя платформе завершить фазу предварительной загрузки. Пример кода ниже (только соответствующие части):
public class PreloaderDisplay extends Sprite implements IPreloaderDisplay {
// mx.preloaders.IPreloaderDisplay interface
public function set preloader(preloader:Sprite):void {
// max priority to ensure we catch this event first
preloader.addEventListener(FlexEvent.INIT_PROGRESS, onInitProgress, false, int.MAX_VALUE);
startLoadingConfiguration();
}
private function onInitProgress(e:FlexEvent):void {
if (isConfigurationLoading) {
queuePreloaderEvent(e);
e.stopImmediatePropagation();
}
}
private function onConfigurationLoaded():void {
dispatchQueuedPreloaderEvents();
}
}
Чтобы использовать его в приложении:
<mx:Application preloader="the.package.of.PreloaderDisplay">