2015-11-04 57 views
0
  • IDE:FLASH CS6專業
  • SDK:AIR 18爲Android

我試圖用Workers我的應用程序。 問題是,它不適用於它。使用AS3工人

public class Main extends Sprite { 

    private var worker:Worker; 

    public function Main() {    

     var ba:ByteArray = this.loaderInfo.bytes; 

     if(Worker.current.isPrimordial){ 
      worker = WorkerDomain.current.createWorker(ba);    
      worker.start(); 
      trace("Created Main"); 
     }else{ 
      trace("Created Worker"); 
     } 
    } 
} 

它應該輸出

Created Main 
Created Worker 

但我只得到

[SWF] Test.swf - 2831 bytes after decompression 
Created Main 
[UnloadSWF] Test.swf 
Test Movie terminated. 

編輯:

好吧,我嘗試發佈的應用程序,並運行它。它的工作原理應該如此。但是當我試圖用Adobe Debug Launcher運行它時,爲什麼它不工作?

這是它看起來像Android上的調試啓動(ADL)

ADL

這是個什麼樣子時公佈等。

Published

編輯2:

Flash Professional CC 2015嘗試過。升級爲AIR SDK 19.0.0.213。 仍然是相同的結果。多麼痛苦的Adobe。

+0

該代碼工作正常,我和輸出你除了。但我使用IntelliJ IDEA的IDE – SushiHangover

回答

0

它應該工作,但Flash Pro CS6不顯示工作人員的trace語句。檢查flashlog.txt或通過MessageChannel將工作人員發送的消息發送給主SWF。

+0

不行的,我這樣做[鏈接]試了一下(http://esdot.ca/site/2012/intro-to-as3-workers-hello-world)。我只得到'[主] HELLO' –

0

我做了一個lib支持使用工人,如果你想使用您可以檢查它在GitHub上,它是開源的項目。希望幫助ASWorker Link

實施是這樣

package 
{ 
    import com.tavernari.asworker.ASWorker; 
    import com.tavernari.asworker.notification.NotificationCenter; 
    import com.tavernari.asworker.notification.NotificationCenterEvent; 

    import flash.display.Sprite; 

    public class ASWorkerDemo extends Sprite 
    { 
     private var asWorker:ASWorker; 

     //BOTH AREA 

     public function ASWorkerDemo() 
     { 
      //important know, all class start here will be replicated in all works. 
      asWorker = new ASWorker(this.stage, uiWorkerStartedHandler, backWorkerStartedHandler); 
     } 

     //BOTH AREA END 

     //UI AREA START 
     private function uiWorkerStartedHandler():void{ 
      //implement all class or calls for your UI 

      NotificationCenter.addEventListener("FROM_BACK_EVENT_MESSAGE", onFromBackEventMessageHandler); 

     } 

     private function onFromBackEventMessageHandler(e:NotificationCenterEvent):void 
     { 
      trace(e.data); 

      if(e.data == "completed job"){ 
       NotificationCenter.dispatchEventBetweenWorkers(new NotificationCenterEvent("NEXT_MESSAGE")); 
      } 
     } 

     //UI AREA END 

     //BACK AREA START 

     private function backWorkerStartedHandler():void{ 
      //implement all class or calls for your BACK operations 
      NotificationCenter.addEventListener("NEXT_MESSAGE", uiCallForNextMessageHandler); 
     } 

     private function uiCallForNextMessageHandler():void 
     { 
      for(var i:int = 0; i < 15; ++i){ 
       NotificationCenter.dispatchEventBetweenWorkers(new NotificationCenterEvent("FROM_BACK_EVENT_MESSAGE", false, i)); 
      } 

      NotificationCenter.dispatchEventBetweenWorkers(new NotificationCenterEvent("FROM_BACK_EVENT_MESSAGE", false, "completed job")); 
     } 

     // BACK AREA END 
    } 
} 

祝你好運與工人

+0

我很欣賞你的答案,但我的問題不是關於如何使用工人,其如何工人的行爲在這使得調試困難Android的調試啓動。 我在土坯bugbase提出了申訴。您可以點擊此處查看: [ADOBE BUGBASE(https://bugbase.adobe.com/index.cfm?event=bug&id=4084050) –

+0

對不起,我想這個問題是關於執行..嗯,我會研究更多關於它! – ViTUu

0

空氣20.0.0.204 ADL也沒有享受任何工人相關(從我有限的實驗),但桌面Flash Player似乎工作得很好。當您在項目中使用Air特定的庫時,這會使調試變得複雜且有問題,並且不希望使用通配符變量類型。

0

目前,工作人員只支持桌面平臺。這Adobe developer's guide page明確提到「桌面平臺」。

與此同時,Jeff Ward還提供了一個AS3-Worker-Compat庫,使您可以使用Worker編寫代碼,這些代碼在不支持Workers的環境中仍能正常工作(當然,在這種情況下,您的代碼將以單線程方式運行)線程模式)。

我想很多人都在等待的Adobe落實工人的移動,希望它會在未來。

+0

除了鏈接之外,還要包含可能有助於未來讀者完成此問題的特定代碼。 – buczek