我找到了解决问题的方法。关键是捕获预加载器的 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">