2011年3月21日月曜日

SystemManagerを独自実装のモノに差し替える方法

Flex3(3.5)でApplicationの初期化シーケンスの中に、独自の処理を割り込んで、デフォルトのプログレスに出力したいなと思ってたのですが、一定の進展があったので、まとめておく。

まず、Flex3はルートにSystemManagerを継承したクラスが指定される。大雑把に言うとこのクラスはアプリケーションに該当するmxmlファイルのデスクリプタとか初期化情報を持っていて、アプリケーションの初期化を行う。

最初のフレームではプレローダを使って、RSLの読み込みを行ってる。RSL等が読み終わると、次のフレームに移る。次のフレームではMixinの処理やアプリケーションの初期化を行う。アプリケーションの初期化が完了したら、プレローダを消す。

普通にアプリケーションを作る上で初期化シーケンスに介入できるのはMixinの段階で、これはMixinメタタグを指定したクラスがあれば、自動的に特定メソッドが呼ばれる。しかし、すでに1フレーム目に移行したあとで、RSLを読み込んだ後になる。

そこで、独自のSystemManager(SystemManagerを継承した独自クラス)を作成して、必要な処理を書き足せれば、いろいろとフックできるに違いない。(これから調査)

というわけで、その手順。

1.Applicationクラスを継承したMyApplicationを作成
2.SystemManagerを継承したMySystemManagerを作成
3.MyApplicationには[Frame(factoryClass="MySystemManager")]を設定
4.アプリケーションのmxmlのルートタグをMyApplicationにする

これだけでOK。

a.mxmlというアプリケーションがあると、通常なら_a_mx_managers_SystemManagerというクラスが自動的に生成される。これの親クラスはSystemManager。
しかし、上記の方法だと、_a_MySystemManagerというクラスが生成され、親クラスはMySystemManagerとなる。これで好き放題できますね。

0 件のコメント:

コメントを投稿