同じswfを使用しているFlexのワーカーに対してライフサイクルイベントがトリガされているとは思われません。私はswfデータの量を小さく保つ必要があるので、同じコードを使用するので、両方のスレッドで同じswfを使用したいと思います。ライフサイクルイベントがなければ、ワーカースレッドを初期化できません。私は作業者とデータを共有することができますが、初期化を行わなくても実際には役に立ちません。私は労働者のための別のクラスを作成しないようにしたいと思います。 のイベントがありますか?ワーカーは初期化に使用できますか?Flexシングルswfワーカー - ライフサイクルイベントやコンストラクタがない場合、ワーカーはどのように設定されていますか?
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark" applicationDPI="160" preinitialize="preInitializeHandler(event)"
initialize="initializeHandler()"
creationComplete="creationCompleteHandler()"
applicationComplete="init()">
<fx:Script>
<![CDATA[
private function init():void
{ trace("Application Complete");
var swfBytes:ByteArray = this.loaderInfo.bytes;
if (Worker.current.isPrimordial) {
var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes);
bgWorker.addEventListener(Event.WORKER_STATE, workerHandler);
bgWorker.start();
}
}
private function preInitializeHandler(event:Event):void{
var p:Event=event;
trace("Pre Initialize");
}
private function initializeHandler():void{
trace("Initialize");
}
private function creationCompleteHandler():void{
trace("Creation Complete");
}
private function workerHandler(event:Event):void{
trace("Worker is running");
}
]]>
</fx:Script>
</s:Application>
出力:
[SWF] FlexMobileWorkerTest.swf - 3,697,251 bytes after decompression
Pre Initialize
Initialize
Creation Complete
Application Complete
Worker is running
[SWF] FlexMobileWorkerTest.swf - 3,697,251 bytes after decompression
何を初期化しますか?あなたのワーカーは既に稼働していますので、使用してください。 – BotMaster
あなたは「あなたが使っている」という言葉を考える必要があります。これは、別のクラスではなく、単一のswfです。 AIRでは、単一のswfが動作します。これは、クラスコンストラクターがステートメントを追加できます(つまり、 'using it')。上記で作成された作業者は、オブジェクト構築ではなく、データを通信するメッセージのみを受け取ることができます。私はflexの単一のswf労働者について間違って考えているかもしれませんが、それ以外の方法はわかりません。 – Joe
明らかに、私は、ワーカーが実行していることを伝えることができます。そうでなければ、イベントを表示するために「ワーカーが実行中です。上記の単一のswfを使用している点は、ワーカースレッドを設定するコードがあっても、Flexでは呼び出されず、コンストラクタのためにAIRアプリケーションで呼び出される点です。私はこの説明を反映するために元の質問を変更しました。 – Joe