私はその問題の解決策を見つけました。重要なのは、プリローダーの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">