Referenshandbok för ActionScript® 3.0 i Adobe® Flash®-plattformen
Hem  |  Dölj paket och klasslista |  Paket  |  Klasser  |  Nyheter  |  Index  |  Bilagor  |  Varför på engelska?
Filter: AIR 30.0 och tidigare, Flash Player 30.0 och tidigare, Flash Lite 4
Flex 4.6 och tidigare, Flash Pro CS6 och tidigare
Dölj filter
flash.system 

Worker  - AS3

Paketx

Översta nivån
adobe.utils
air.desktop
air.net
air.update
air.update.events
coldfusion.air
coldfusion.air.errors
coldfusion.air.events
coldfusion.service
coldfusion.service.events
coldfusion.service.mxml
com.adobe.acm.solutions.authoring.domain.extensions
com.adobe.acm.solutions.ccr.domain.extensions
com.adobe.consulting.pst.vo
com.adobe.dct.component
com.adobe.dct.component.datadictionary
com.adobe.dct.component.datadictionaryElement
com.adobe.dct.component.dataElementsPanel
com.adobe.dct.component.toolbars
com.adobe.dct.event
com.adobe.dct.exp
com.adobe.dct.model
com.adobe.dct.service
com.adobe.dct.service.provider
com.adobe.dct.transfer
com.adobe.dct.util
com.adobe.dct.view
com.adobe.ep.taskmanagement.domain
com.adobe.ep.taskmanagement.event
com.adobe.ep.taskmanagement.filter
com.adobe.ep.taskmanagement.services
com.adobe.ep.taskmanagement.util
com.adobe.ep.ux.attachmentlist.component
com.adobe.ep.ux.attachmentlist.domain
com.adobe.ep.ux.attachmentlist.domain.events
com.adobe.ep.ux.attachmentlist.domain.renderers
com.adobe.ep.ux.attachmentlist.skin
com.adobe.ep.ux.attachmentlist.skin.renderers
com.adobe.ep.ux.content.event
com.adobe.ep.ux.content.factory
com.adobe.ep.ux.content.handlers
com.adobe.ep.ux.content.managers
com.adobe.ep.ux.content.model.asset
com.adobe.ep.ux.content.model.preview
com.adobe.ep.ux.content.model.relation
com.adobe.ep.ux.content.model.search
com.adobe.ep.ux.content.model.toolbar
com.adobe.ep.ux.content.search
com.adobe.ep.ux.content.services
com.adobe.ep.ux.content.services.load
com.adobe.ep.ux.content.services.permissions
com.adobe.ep.ux.content.services.preview
com.adobe.ep.ux.content.services.providers
com.adobe.ep.ux.content.services.query
com.adobe.ep.ux.content.services.relationships
com.adobe.ep.ux.content.services.search.lccontent
com.adobe.ep.ux.content.services.version
com.adobe.ep.ux.content.view
com.adobe.ep.ux.content.view.components.activate
com.adobe.ep.ux.content.view.components.grid
com.adobe.ep.ux.content.view.components.grid.hover
com.adobe.ep.ux.content.view.components.grid.hover.component
com.adobe.ep.ux.content.view.components.grid.renderers
com.adobe.ep.ux.content.view.components.relationships
com.adobe.ep.ux.content.view.components.review
com.adobe.ep.ux.content.view.components.search.renderers
com.adobe.ep.ux.content.view.components.searchpod
com.adobe.ep.ux.content.view.components.toolbar
com.adobe.ep.ux.content.view.components.toolbar.controlRenderers
com.adobe.ep.ux.content.view.components.version
com.adobe.ep.ux.documentsubmit.component
com.adobe.ep.ux.documentsubmit.domain
com.adobe.ep.ux.documentsubmit.skin
com.adobe.ep.ux.taskaction.component
com.adobe.ep.ux.taskaction.domain
com.adobe.ep.ux.taskaction.domain.events
com.adobe.ep.ux.taskaction.skin
com.adobe.ep.ux.taskdetails.component
com.adobe.ep.ux.taskdetails.domain
com.adobe.ep.ux.taskdetails.skin
com.adobe.ep.ux.tasklist.component
com.adobe.ep.ux.tasklist.domain
com.adobe.ep.ux.tasklist.skin
com.adobe.ep.ux.webdocumentviewer.domain
com.adobe.exm.expression
com.adobe.exm.expression.error
com.adobe.exm.expression.event
com.adobe.exm.expression.impl
com.adobe.fiber.runtime.lib
com.adobe.fiber.services
com.adobe.fiber.services.wrapper
com.adobe.fiber.styles
com.adobe.fiber.util
com.adobe.fiber.valueobjects
com.adobe.gravity.binding
com.adobe.gravity.context
com.adobe.gravity.flex.bundleloader
com.adobe.gravity.flex.progress
com.adobe.gravity.flex.serviceloader
com.adobe.gravity.framework
com.adobe.gravity.init
com.adobe.gravity.service.bundleloader
com.adobe.gravity.service.logging
com.adobe.gravity.service.manifest
com.adobe.gravity.service.progress
com.adobe.gravity.tracker
com.adobe.gravity.ui
com.adobe.gravity.utility
com.adobe.gravity.utility.async
com.adobe.gravity.utility.error
com.adobe.gravity.utility.events
com.adobe.gravity.utility.factory
com.adobe.gravity.utility.flex.async
com.adobe.gravity.utility.logging
com.adobe.gravity.utility.message
com.adobe.gravity.utility.sequence
com.adobe.gravity.utility.url
com.adobe.guides.control
com.adobe.guides.domain
com.adobe.guides.i18n
com.adobe.guides.spark.components.skins
com.adobe.guides.spark.components.skins.mx
com.adobe.guides.spark.headers.components
com.adobe.guides.spark.headers.skins
com.adobe.guides.spark.layouts.components
com.adobe.guides.spark.layouts.skins
com.adobe.guides.spark.navigators.components
com.adobe.guides.spark.navigators.renderers
com.adobe.guides.spark.navigators.skins
com.adobe.guides.spark.util
com.adobe.guides.spark.wrappers.components
com.adobe.guides.spark.wrappers.skins
com.adobe.guides.submit
com.adobe.icc.dc.domain
com.adobe.icc.dc.domain.factory
com.adobe.icc.editors.events
com.adobe.icc.editors.handlers
com.adobe.icc.editors.managers
com.adobe.icc.editors.model
com.adobe.icc.editors.model.config
com.adobe.icc.editors.model.el
com.adobe.icc.editors.model.el.operands
com.adobe.icc.editors.model.el.operators
com.adobe.icc.enum
com.adobe.icc.external.dc
com.adobe.icc.obj
com.adobe.icc.services
com.adobe.icc.services.category
com.adobe.icc.services.config
com.adobe.icc.services.download
com.adobe.icc.services.export
com.adobe.icc.services.external
com.adobe.icc.services.formbridge
com.adobe.icc.services.fragmentlayout
com.adobe.icc.services.layout
com.adobe.icc.services.letter
com.adobe.icc.services.locator
com.adobe.icc.services.module
com.adobe.icc.services.render
com.adobe.icc.services.submit
com.adobe.icc.services.user
com.adobe.icc.token
com.adobe.icc.vo
com.adobe.icc.vo.render
com.adobe.icomm.assetplacement.controller
com.adobe.icomm.assetplacement.controller.utils
com.adobe.icomm.assetplacement.data
com.adobe.icomm.assetplacement.model
com.adobe.livecycle.assetmanager.client
com.adobe.livecycle.assetmanager.client.event
com.adobe.livecycle.assetmanager.client.handler
com.adobe.livecycle.assetmanager.client.managers
com.adobe.livecycle.assetmanager.client.model
com.adobe.livecycle.assetmanager.client.model.cms
com.adobe.livecycle.assetmanager.client.service
com.adobe.livecycle.assetmanager.client.service.search
com.adobe.livecycle.assetmanager.client.service.search.cms
com.adobe.livecycle.assetmanager.client.utils
com.adobe.livecycle.content
com.adobe.livecycle.rca.model
com.adobe.livecycle.rca.model.constant
com.adobe.livecycle.rca.model.document
com.adobe.livecycle.rca.model.participant
com.adobe.livecycle.rca.model.reminder
com.adobe.livecycle.rca.model.stage
com.adobe.livecycle.rca.service
com.adobe.livecycle.rca.service.core
com.adobe.livecycle.rca.service.core.delegate
com.adobe.livecycle.rca.service.process
com.adobe.livecycle.rca.service.process.delegate
com.adobe.livecycle.rca.token
com.adobe.livecycle.ria.security.api
com.adobe.livecycle.ria.security.service
com.adobe.mosaic.layouts
com.adobe.mosaic.layouts.dragAndDrop
com.adobe.mosaic.layouts.interfaces
com.adobe.mosaic.mxml
com.adobe.mosaic.om.constants
com.adobe.mosaic.om.events
com.adobe.mosaic.om.impl
com.adobe.mosaic.om.interfaces
com.adobe.mosaic.skinning
com.adobe.mosaic.sparklib.editors
com.adobe.mosaic.sparklib.optionMenu
com.adobe.mosaic.sparklib.scrollableMenu
com.adobe.mosaic.sparklib.scrollableMenu.skins
com.adobe.mosaic.sparklib.tabLayout
com.adobe.mosaic.sparklib.tabLayout.events
com.adobe.mosaic.sparklib.tabLayout.layouts
com.adobe.mosaic.sparklib.tabLayout.skins
com.adobe.mosaic.sparklib.text
com.adobe.mosaic.sparklib.util
com.adobe.solutions.acm.authoring.presentation
com.adobe.solutions.acm.authoring.presentation.actionbar
com.adobe.solutions.acm.authoring.presentation.common
com.adobe.solutions.acm.authoring.presentation.events
com.adobe.solutions.acm.authoring.presentation.fragment
com.adobe.solutions.acm.authoring.presentation.letter
com.adobe.solutions.acm.authoring.presentation.letter.data
com.adobe.solutions.acm.authoring.presentation.preview
com.adobe.solutions.acm.authoring.presentation.rte
com.adobe.solutions.acm.ccr.presentation
com.adobe.solutions.acm.ccr.presentation.contentcapture
com.adobe.solutions.acm.ccr.presentation.contentcapture.events
com.adobe.solutions.acm.ccr.presentation.contentcapture.preview
com.adobe.solutions.acm.ccr.presentation.datacapture
com.adobe.solutions.acm.ccr.presentation.datacapture.renderers
com.adobe.solutions.acm.ccr.presentation.pdf
com.adobe.solutions.exm
com.adobe.solutions.exm.authoring
com.adobe.solutions.exm.authoring.components.controls
com.adobe.solutions.exm.authoring.components.toolbars
com.adobe.solutions.exm.authoring.domain
com.adobe.solutions.exm.authoring.domain.expression
com.adobe.solutions.exm.authoring.domain.impl
com.adobe.solutions.exm.authoring.domain.method
com.adobe.solutions.exm.authoring.domain.variable
com.adobe.solutions.exm.authoring.enum
com.adobe.solutions.exm.authoring.events
com.adobe.solutions.exm.authoring.model
com.adobe.solutions.exm.authoring.renderer
com.adobe.solutions.exm.authoring.view
com.adobe.solutions.exm.expression
com.adobe.solutions.exm.impl
com.adobe.solutions.exm.impl.method
com.adobe.solutions.exm.method
com.adobe.solutions.exm.mock
com.adobe.solutions.exm.mock.method
com.adobe.solutions.exm.runtime
com.adobe.solutions.exm.runtime.impl
com.adobe.solutions.exm.variable
com.adobe.solutions.prm.constant
com.adobe.solutions.prm.domain
com.adobe.solutions.prm.domain.factory
com.adobe.solutions.prm.domain.impl
com.adobe.solutions.prm.domain.manager
com.adobe.solutions.prm.presentation.asset
com.adobe.solutions.prm.presentation.constant
com.adobe.solutions.prm.presentation.document
com.adobe.solutions.prm.presentation.event
com.adobe.solutions.prm.presentation.file
com.adobe.solutions.prm.presentation.project
com.adobe.solutions.prm.presentation.team
com.adobe.solutions.prm.presentation.util
com.adobe.solutions.prm.service
com.adobe.solutions.prm.services.impl
com.adobe.solutions.prm.vo
com.adobe.solutions.rca.constant
com.adobe.solutions.rca.domain
com.adobe.solutions.rca.domain.common
com.adobe.solutions.rca.domain.factory
com.adobe.solutions.rca.domain.impl
com.adobe.solutions.rca.domain.impl.manager
com.adobe.solutions.rca.domain.manager
com.adobe.solutions.rca.presentation
com.adobe.solutions.rca.presentation.comment
com.adobe.solutions.rca.presentation.constant
com.adobe.solutions.rca.presentation.event
com.adobe.solutions.rca.presentation.gantt
com.adobe.solutions.rca.presentation.gantt.ruler
com.adobe.solutions.rca.presentation.template
com.adobe.solutions.rca.presentation.template.audit
com.adobe.solutions.rca.presentation.template.definition
com.adobe.solutions.rca.presentation.template.documents
com.adobe.solutions.rca.presentation.template.stages
com.adobe.solutions.rca.presentation.util
com.adobe.solutions.rca.service
com.adobe.solutions.rca.services.impl
com.adobe.solutions.rca.vo
com.adobe.solutions.rca.vo.um
com.adobe.viewsource
fl.accessibility
fl.containers
fl.controls
fl.controls.dataGridClasses
fl.controls.listClasses
fl.controls.progressBarClasses
fl.core
fl.data
fl.display
fl.events
fl.ik
fl.lang
fl.livepreview
fl.managers
fl.motion
fl.motion.easing
fl.rsl
fl.text
fl.transitions
fl.transitions.easing
fl.video
flash.accessibility
flash.concurrent
flash.crypto
flash.data
flash.desktop
flash.display
flash.display3D
flash.display3D.textures
flash.errors
flash.events
flash.external
flash.filesystem
flash.filters
flash.geom
flash.globalization
flash.html
flash.media
flash.net
flash.net.dns
flash.net.drm
flash.notifications
flash.permissions
flash.printing
flash.profiler
flash.sampler
flash.security
flash.sensors
flash.system
flash.text
flash.text.engine
flash.text.ime
flash.ui
flash.utils
flash.xml
flashx.textLayout
flashx.textLayout.compose
flashx.textLayout.container
flashx.textLayout.conversion
flashx.textLayout.edit
flashx.textLayout.elements
flashx.textLayout.events
flashx.textLayout.factory
flashx.textLayout.formats
flashx.textLayout.operations
flashx.textLayout.utils
flashx.undo
ga.controls
ga.layouts
ga.model
ga.uiComponents
ga.util
ga.views
ga.wrappers
lc.foundation
lc.foundation.domain
lc.foundation.events
lc.foundation.ui
lc.foundation.util
lc.preloader
lc.procmgmt
lc.procmgmt.commands
lc.procmgmt.domain
lc.procmgmt.events
lc.procmgmt.formbridge
lc.procmgmt.impl
lc.procmgmt.ui.attachments
lc.procmgmt.ui.controls
lc.procmgmt.ui.controls.card
lc.procmgmt.ui.controls.renderer
lc.procmgmt.ui.help
lc.procmgmt.ui.layout
lc.procmgmt.ui.presentationmodel
lc.procmgmt.ui.process
lc.procmgmt.ui.search
lc.procmgmt.ui.startpoint
lc.procmgmt.ui.task
lc.procmgmt.ui.task.form
lc.procmgmt.ui.task.form.commands
lc.procmgmt.ui.tracking
mx.accessibility
mx.automation
mx.automation.air
mx.automation.delegates
mx.automation.delegates.advancedDataGrid
mx.automation.delegates.charts
mx.automation.delegates.containers
mx.automation.delegates.controls
mx.automation.delegates.controls.dataGridClasses
mx.automation.delegates.controls.fileSystemClasses
mx.automation.delegates.core
mx.automation.delegates.flashflexkit
mx.automation.events
mx.binding
mx.binding.utils
mx.charts
mx.charts.chartClasses
mx.charts.effects
mx.charts.effects.effectClasses
mx.charts.events
mx.charts.renderers
mx.charts.series
mx.charts.series.items
mx.charts.series.renderData
mx.charts.styles
mx.collections
mx.collections.errors
mx.containers
mx.containers.accordionClasses
mx.containers.dividedBoxClasses
mx.containers.errors
mx.containers.utilityClasses
mx.controls
mx.controls.advancedDataGridClasses
mx.controls.dataGridClasses
mx.controls.listClasses
mx.controls.menuClasses
mx.controls.olapDataGridClasses
mx.controls.scrollClasses
mx.controls.sliderClasses
mx.controls.textClasses
mx.controls.treeClasses
mx.controls.videoClasses
mx.core
mx.core.windowClasses
mx.data
mx.data.crypto
mx.data.errors
mx.data.events
mx.data.messages
mx.data.mxml
mx.data.offline.errors
mx.data.utils
mx.effects
mx.effects.easing
mx.effects.effectClasses
mx.events
mx.filters
mx.flash
mx.formatters
mx.geom
mx.graphics
mx.graphics.codec
mx.graphics.shaderClasses
mx.logging
mx.logging.errors
mx.logging.targets
mx.managers
mx.messaging
mx.messaging.channels
mx.messaging.config
mx.messaging.errors
mx.messaging.events
mx.messaging.management
mx.messaging.messages
mx.modules
mx.netmon
mx.olap
mx.olap.aggregators
mx.preloaders
mx.printing
mx.resources
mx.rpc
mx.rpc.events
mx.rpc.http
mx.rpc.http.mxml
mx.rpc.livecycle
mx.rpc.mxml
mx.rpc.remoting
mx.rpc.remoting.mxml
mx.rpc.soap
mx.rpc.soap.mxml
mx.rpc.wsdl
mx.rpc.xml
mx.skins
mx.skins.halo
mx.skins.spark
mx.skins.wireframe
mx.skins.wireframe.windowChrome
mx.states
mx.styles
mx.utils
mx.validators
org.osmf.containers
org.osmf.display
org.osmf.elements
org.osmf.events
org.osmf.layout
org.osmf.logging
org.osmf.media
org.osmf.metadata
org.osmf.net
org.osmf.net.dvr
org.osmf.net.httpstreaming
org.osmf.net.metrics
org.osmf.net.qos
org.osmf.net.rtmpstreaming
org.osmf.net.rules
org.osmf.traits
org.osmf.utils
spark.accessibility
spark.automation.delegates
spark.automation.delegates.components
spark.automation.delegates.components.gridClasses
spark.automation.delegates.components.mediaClasses
spark.automation.delegates.components.supportClasses
spark.automation.delegates.skins.spark
spark.automation.events
spark.collections
spark.components
spark.components.calendarClasses
spark.components.gridClasses
spark.components.mediaClasses
spark.components.supportClasses
spark.components.windowClasses
spark.core
spark.effects
spark.effects.animation
spark.effects.easing
spark.effects.interpolation
spark.effects.supportClasses
spark.events
spark.filters
spark.formatters
spark.formatters.supportClasses
spark.globalization
spark.globalization.supportClasses
spark.layouts
spark.layouts.supportClasses
spark.managers
spark.modules
spark.preloaders
spark.primitives
spark.primitives.supportClasses
spark.skins
spark.skins.mobile
spark.skins.mobile.supportClasses
spark.skins.spark
spark.skins.spark.mediaClasses.fullScreen
spark.skins.spark.mediaClasses.normal
spark.skins.spark.windowChrome
spark.skins.wireframe
spark.skins.wireframe.mediaClasses
spark.skins.wireframe.mediaClasses.fullScreen
spark.transitions
spark.utils
spark.validators
spark.validators.supportClasses
xd.core.axm.enterprise.view.components
xd.core.axm.enterprise.view.skins
xd.core.axm.view.components
xd.core.axm.view.components.support

Språkelement

Globala konstanter
Globala funktioner
Operatorer
Programsatser, nyckelord och direktiv
Specialtyper

Bilagor

Nyheter
Kompilatorfel
Kompileringsvarningar
Körningsfel
Flytta till ActionScript 3
Teckenuppsättningar som stöds
Endast MXML-taggar
Motion XML-element
Timed Text-taggar
Lista över borttagna element
Konstanter för hjälpmedelsimplementering
Använda ActionScript-exempel
Juridiska meddelanden
Paketflash.system
Klasspublic final class Worker
ArvWorker Inheritance EventDispatcher Inheritance Object

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Ett Worker-objekt representerar en arbetare som är en virtuell instans av Flash-miljön. Varje Worker-instans kontrollerar och erbjuder åtkomst till livscykeln och delade data för en arbetare.

Med en arbetare kan du köra kod "i bakgrunden" samtidigt som andra åtgärder körs i annan arbetare (inklusive i swf-huvudfilens arbetare). I sammanhang där inte arbetare används kan vissa åtgärder, till exempel för att bearbeta stora mängder data i en slinga, ta så lång tid att utföra att de förhindrar huvudprogrammet att uppdatera skärmen tillräckligt snabbt. Detta kan leda till en ojämn ström till skärmen eller att bilden fryses.

Med hjälp av arbetare kan du utföra en omfattande körning eller en långsam åtgärd i bakgrunden. I varje arbetare körs koden i en separat köringstråd från andra arbetare. Kod som körs länge i en arbetare blockerar inte kod som körs i andra arbetare. I stället körs de båda koduppsättningarna parallellt. Detta innebär att en arbetare kan användas för att köra kod i bakgrunden medan huvudprogrammet är fritt att fortsätta uppdatera skärmen.

Den här funktionen som samtidigt kör flera uppsättningar med kodinstruktioner kallas för samtidighet (concurrency).

Obs! Att använda arbetare för samtidighet stöds i både Flash Player och i AIR på datorplattformar. För mobila plattformar stöds samtidighet i AIR på både Android och iOS. Du kan använda den statiska egenskapen isSupported för att kontrollera om samtidighet stöds innan du försöker använda den.

Du kan inte skapa arbetarförekomster direkt genom att anropa Worker()-konstruktorn. I sammanhang där samtidighet med arbetare stöds skapas vid start automatiskt den arbetare som är associerad med SWF-huvudfilen, kallas även den primitiva arbetaren.

Ytterligare arbetare skapas med separata swf-filer. Om du vill skapa en ny instans av Worker-klassen, skickar du en ByteArray med byte för bakgrundsarbetarens swf-fil som ett argument till WorkerDomain-klassens createWorker()-metod. Det finns tre vanliga sätt att få åtkomst till byte i en swf-fil för detta ändamål:

  • Använd metataggen [Embed] för att bädda in swf-filen i programmet som en ByteArray:

     // Embed the SWF file
     [Embed(source="../swfs/BgWorker.swf", mimeType="application/octet-stream")]
     private static var BgWorker_ByteClass:Class;
     
     private function createWorker():void
     {
       // create the background worker
       var workerBytes:ByteArray = new BgWorker_ByteClass();
       var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes);
       
       // listen for worker state changes to know when the worker is running
       bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
       
       // set up communication between workers using 
       // setSharedProperty(), createMessageChannel(), etc.
       // ... (not shown)
       
       bgWorker.start();
     }
  • Läs in en extern SWF-fil med en URLLoader:

     // load the SWF file
     var workerLoader:URLLoader = new URLLoader();
     workerLoader.dataFormat = URLLoaderDataFormat.BINARY;
     workerLoader.addEventListener(Event.COMPLETE, loadComplete);
     workerLoader.load(new URLRequest("BgWorker.swf"));
     
     private function loadComplete(event:Event):void
     {
       // create the background worker
       var workerBytes:ByteArray = event.target.data as ByteArray;
       var bgWorker:Worker = WorkerDomain.current.createWorker(workerBytes);
       
       // listen for worker state changes to know when the worker is running
       bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
       
       // set up communication between workers using 
       // setSharedProperty(), createMessageChannel(), etc.
       // ... (not shown)
       
       bgWorker.start();
     }
  • Använd en SWF-fil eftersom både den primitiva arbetaren och bakgrundsarbetaren:

     // The primordial worker's main class constructor
     public function PrimordialWorkerClass()
     {
       init();
     }
     
     private function init():void
     {
       var swfBytes:ByteArray = this.loaderInfo.bytes;
       
       // Check to see if this is the primordial worker
       if (Worker.current.isPrimordial)    
       {
         // create a background worker
         var bgWorker:Worker = WorkerDomain.current.createWorker(swfBytes);
         
         // listen for worker state changes to know when the worker is running
         bgWorker.addEventListener(Event.WORKER_STATE, workerStateHandler);
         
         // set up communication between workers using 
         // setSharedProperty(), createMessageChannel(), etc.
         // ... (not shown)
         
         bgWorker.start();
       }
       else // entry point for the background worker
       {
         // set up communication between workers using getSharedProperty()
         // ... (not shown)
         
         // start the background work
       }
     }

Arbetare som körs oberoende av varandra och som inte har åtkomst till samma minne, variabler och kod. Det finns emellertid tre metoder tillgängliga för att skicka meddelanden och data mellan Worker-förekomster.

  • Delade egenskaper: Varje arbetare har en intern uppsättning namngivna värden som kan ställas in och läsas från själva arbetaren samt från andra arbetare. Du kan ställa in ett värde med metoden setSharedProperty() och läsa värdet med metoden getSharedProperty().
  • MessageChannel: Med ett MessageChannel-objekt kan du skicka envägsmeddelanden och data från en arbetare till en annan. Kod i den mottagande arbetaren kan lyssna efter en händelse för att få reda på när ett meddelande anländer. Om du vill skapa ett MessageChannel-objekt ska du använda metoden createMessageChannel().
  • Delbar ByteArray: Om ByteArray-objektets shareable-egenskap är true, används samma underliggande minne för instanser av denna ByteArray i alla arbetare. Eftersom koden i flera arbetare har åtkomst till det delade minnet samtidigt, måste du i koden använda den metod som beskrivs i egenskapsbeskrivningen för ByteArray.shareable för att undvika problem med oväntade dataändringar.

Flera körtids-API:er är inte tillgängliga i kod som körs i bakgrunden. Dessa består primärt av API:er relaterade till metoder för användarindata och -utdata eller till operativsystemselement, såsom fönster och draoperationer. Som regel gäller att du för API:er som inte stöds i alla sammanhang ska använda isSupported, available och liknande egenskaper för att kontrollera om API:n är tillgänglig i bakgrundsarbetarens sammanhang innan du försöker använda API:n.

Obs! ANE-tillägg stöds inte för bakgrundsarbetare och sekundära arbetare.

Arbetare är värdefulla eftersom de minskar riskerna för bildrutebortfall på grund av att huvudåtergivningstråden blockerats av annan kod. Emellertid kräver arbetare mer systemminne och processorkapacitet vilket kan påverka programmets generella prestanda negativt. Eftersom varje arbetare använder egna instanser av den virtuella miljön kan även pålägget för en enkel arbetare vara stort. När du använder arbetare ska du testa koden på alla målplattformar för att försäkra dig om att inte belastningen på systemet blir för stor. Adobe rekommenderar att du använder mer än en eller två bakgrundsarbetare i vanliga situationer.

Visa exemplen

Lär dig mer

Relaterade API-element



Publika egenskaper
 EgenskapDefinieras med
 Inheritedconstructor : Object
En referens till klassobjektet eller konstruktorfunktionen för en given objektinstans.
Object
  current : Worker
[statisk] [skrivskyddad] Ger åtkomst till arbetaren som innehåller den aktuella koden
Worker
  isPrimordial : Boolean
[skrivskyddad] Anger om arbetaren är den primitiva arbetaren.
Worker
  isSupported : Boolean
[statisk] [skrivskyddad] Anger om det aktuella miljösammanhanget har stöd för Worker-objekten vid samtidig kodkörning.
Worker
  state : String
[skrivskyddad] Det aktuella läget för arbetaren under dess livscykel.
Worker
Publika metoder
 MetodDefinieras med
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[åsidosätt] Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser.
Worker
  
Skapar en ny MessageChannel-instans för att skicka meddelanden från arbetaren som metoden anropas från till en annan mottagande arbetare.
Worker
 Inherited
Skickar en händelse till händelseflödet.
EventDispatcher
  
Erhåller ett värde som lagras i den här arbetaren med en namngiven nyckel.
Worker
 Inherited
Kontrollerar om EventDispatcher-objektet har några avlyssnare registrerade för en viss typ av händelse.
EventDispatcher
 Inherited
Anger om det finns en egenskap angiven för ett objekt.
Object
 Inherited
Anger om en instans av klassen Object finns i prototypkedjan för objektet som anges som parameter.
Object
 Inherited
Anger om den angivna egenskapen finns och är uppräkningsbar.
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[åsidosätt] Tar bort en avlyssnare från EventDispatcher-objektet.
Worker
 Inherited
Anger tillgänglighet för en dynamisk egenskap för slingåtgärder.
Object
  
Tillhandahåller ett namngivet värde som är tillgängligt för kod som körs i arbetarens swf-fil.
Worker
  
Startar körningen av arbetaren.
Worker
  
Stoppar kodkörningen för den här arbetaren.
Worker
 Inherited
Returnerar det här objektets strängrepresentation, formaterad i enlighet med språkspecifika konventioner.
Object
 Inherited
Returnerar det angivna objektets strängbeteckning.
Object
 Inherited
Returnerar det angivna objektets primitiva värde.
Object
 Inherited
Kontrollerar om en händelseavlyssnare är registrerad för det här EventDispatcher-objektet eller något av dess överordnade objekt för den angivna händelsetypen.
EventDispatcher
Händelser
 Händelse Sammanfattning Definieras med
 Inherited[utsändningshändelse] Skickas när Flash Player eller AIR får operativsystemfokus och blir aktivt.EventDispatcher
 Inherited[utsändningshändelse] Skickas när Flash Player eller AIR förlorar operativsystemfokus och blir inaktivt.EventDispatcher
  Skickas när värdet på arbetarens state-egenskap ändras.Worker
Egenskapsdetaljer

current

egenskap
current:Worker  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Ger åtkomst till arbetaren som innehåller den aktuella koden



Implementering
    public static function get current():Worker

isPrimordial

egenskap 
isPrimordial:Boolean  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Anger om arbetaren är den primitiva arbetaren.

Den primitiva arbetaren är arbetaren i vilken den inledande swf-filen körs. Denna arbetare kontrollerar återgivningen på skärmen.

Denna egenskap kan användas för att utforma ett program där den primitiva arbetaren och bakgrundsarbetaren är två instanser av samma swf-fil. Alternativet är att strukturera koden så att bakgrundsarbetaren använder en annan kod komplierad i en annan swf-fil än den primitiva arbetaren.



Implementering
    public function get isPrimordial():Boolean

isSupported

egenskap 
isSupported:Boolean  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Anger om det aktuella miljösammanhanget har stöd för Worker-objekten vid samtidig kodkörning.

Om samtidighet är tillgänglig är detta egenskapsvärde true.



Implementering
    public static function get isSupported():Boolean

state

egenskap 
state:String  [skrivskyddad]

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Det aktuella läget för arbetaren under dess livscykel. Möjliga värden för den här egenskapen definieras i klassen WorkerState.



Implementering
    public function get state():String

Relaterade API-element

Metoddetaljer

addEventListener

()metod
override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Registrerar ett händelseavlyssnarobjekt för ett EventDispatcher-objekt så att avlyssnaren får meddelanden om händelser. Du kan registrera händelseavlyssnare på alla noder i visningslistan efter en särskild typ av händelse, fas och prioritet.

När du har registrerat en händelseavlyssnare går det inte att ändra dess prioritet genom ytterligare anrop till addEventListener(). För att kunna ändra avlyssnarens prioritet måste du först anropa removeListener(). Sedan går det att registrera avlyssnaren på nytt med den nya prioritetsnivån.

Kom ihåg att när avlyssnaren har registrerats så skapar anrop till addEventListener() med annan type eller useCapture-värde en separat avlyssnarregistrering. Om du till exempel först registrerar en avlyssnare med useCapture inställt på true, avlyssnar den bara under hämtningsfasen. Om du anropar addEventListener() igen med samma avlyssningsobjekt men med useCapture inställt på false, får du två separata avlyssnare: en som avlyssnar under hämtningsfasen och en som avlyssnar under både mål- och bubblingsfasen.

Det går inte att registrera en händelseavlyssnare endast för målfasen eller bubblingsfasen. De faserna är sammankopplade vid registreringen eftersom bubblande bara tillämpas på de som är överordnade målnoden.

Om du inte längre behöver en händelseavlyssnare tar du bort den genom att anropa removeEventListener(). Annars finns risk för minnesproblem. Händelseavlyssnare tas inte automatiskt bort från minnet, eftersom skräpinsamlaren inte tar bort avlyssnaren så länge det skickande objektet finns (om inte parametern useWeakReference är true).

Kopiering av en EventDispatcher-instans innebär inte att de händelseavlyssnare som är kopplade till den kopieras. (Om en nod som du nyss skapat behöver en händelseavlyssnare måste du koppla avlyssnaren efter att du skapat noden.) Om du däremot flyttar en EventDispatcher-instans flyttas den kopplade händelseavlyssnaren med.

Om händelseavlyssnaren är registrerad på en nod samtidigt som en händelse bearbetas på den noden aktiveras inte händelseavlyssnaren under den aktuella fasen, men den kan aktiveras under en senare fas i händelseflödet, t.ex. bubblingsfasen.

Om en händelseavlyssnare tas bort från en nod samtidigt som en händelse bearbetas på den noden, aktiveras den ändå av de aktuella åtgärderna. När händelseavlyssnaren tagits bort anropas den aldrig mer (om den inte registreras på nytt för framtida bearbetning).

Parametrar

type:String — Händelsens typ.
 
listener:Function — Avlyssnarfunktionen som bearbetar händelsen. Den här funktionen måste acceptera ett Event-objekt som sin enda parameter och får inte returnera någonting, se följande exempel:
function(evt:Event):void

Funktionen kan ha vilket namn som helst.

 
useCapture:Boolean (default = false)Avgör om avlyssnaren fungerar i hämtningsfasen eller mål- och bubblingsfaserna. Om useCapture är inställd på true bearbetar avlyssningsprocessen bara händelsen under hämtningsfasen och inte under mål- eller bubblingsfasen. Om useCapture är inställd på false bearbetar avlyssningsprocessen bara händelsen under mål- och bubblingsfasen. Om du vill avlyssna händelsen under alla tre faserna anropar du addEventListener två gånger, en gång med useCapture inställd på true, och sedan en gång med useCapture inställd på false.
 
priority:int (default = 0) — Händelseavlyssnarens prioritetsnivå. Prioriteten anges av ett 32-bitars heltal med tecken. Ju högre tal, desto högre prioritet. Alla avlyssnare med prioritet n bearbetas före avlyssnare med prioritet n -1. Om två eller fler avlyssnare har samma prioritet bearbetas de i den ordning de lades till. Standardprioritet är 0.
 
useWeakReference:Boolean (default = false) — Avgör om referensen till avlyssnaren är stark eller svag. En stark referens (standard) förhindrar att avlyssnaren skräpsamlas. Det gör inte en svag referens.

Medlemsfunktioner på klassnivå skräpsamlas inte, så du kan ange useWeakReference till true för medlemsfunktioner på klassnivå utan att de skräpsamlas. Om du anger useWeakReference till true för en avlyssnare som är en inkapslad funktion kommer funktionen att skräpsamlas och inte längre vara beständig. Om du skapar referenser till den inre funktionen (sparar den i en annan variabel) skräpsamlas den inte utan förblir beständig.

createMessageChannel

()metod 
public function createMessageChannel(receiver:Worker):MessageChannel

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Skapar en ny MessageChannel-instans för att skicka meddelanden från arbetaren som metoden anropas från till en annan mottagande arbetare. Kod i arbetaren som skapar MessageChannel-objektet kan använda den för att skicka envägsmeddelanden till det Worker-objekt som anges i receiver-argumentet.

Trots att en MessageChannel-instans kan användas för att skicka meddelanden och data från en Worker-instans till en annan, måste minst en MessageChannel-instans skickas till en underordnad Worker-instans som en delad egenskap genom att anropa Worker-objektets setSharedProperty()-metod.

    outgoingChannel = Worker.current.createMessageChannel(bgWorker);
    incomingChannel = bgWorker.createMessageChannel(Worker.current);
    
    bgWorker.setSharedProperty("incoming", outgoingChannel);
    bgWorker.setSharedProperty("outgoing", incomingChannel);
    
    // listen for messages from the receiving MessageChannel
    // This event is triggered when the background sends a message to this worker
    incomingChannel.addEventListener(Event.CHANNEL_MESSAGE, incomingMessageHandler);

Parametrar

receiver:Worker — Arbetaren som kommer att ta emot meddelanden överförda via den skapade meddelandekanalen.

Returnerar
MessageChannel — MessageChannel-objektet som skapads av en åtgärd

getSharedProperty

()metod 
public function getSharedProperty(key:String):*

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Erhåller ett värde som lagras i den här arbetaren med en namngiven nyckel.

Koden i en underordnad arbetare kan anropa den här metoden för att hämta ett värde så tidigt som möjligt i konstruktorn för arbetar-swf-filens huvudklass.

Parametrar

key:String — Namnet på den delade egenskapen som ska hämtas

Returnerar
* — Det delade egenskapsvärdet som lagrats med den angivna nyckeln eller null om inget värde lagras för den angivna nyckeln

removeEventListener

()metod 
override public function removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Tar bort en avlyssnare från EventDispatcher-objektet. Ett anrop till den här metoden har ingen effekt om det inte finns någon matchande avlyssnare registrerad för EventDispatcher-objektet.

Parametrar

type:String — Händelsens typ.
 
listener:Function — Det avlyssnarobjekt som ska tas bort.
 
useCapture:Boolean (default = false)Anger om avlyssnaren registrerades för hämtningsfasen eller mål- och bubblingsfaserna. Om avlyssnaren registrerades både för hämtningsfasen och mål- och bubblingsfaserna krävs två anrop till removeEventListener() för att båda ska tas bort: ett anrop med useCapture() inställt på true och ett annat anrop med useCapture() inställt på false.

setSharedProperty

()metod 
public function setSharedProperty(key:String, value:*):void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Tillhandahåller ett namngivet värde som är tillgängligt för kod som körs i arbetarens swf-fil.

Du kan anropa den här metoden innan du anropar arbetarens start()-metod. I detta fall är den delade egenskapen tillgänglig för kod i arbetarens swf-fil vid konstruktionen.

Värdet som skickas till parametern value kan näst intill vara vilket objekt som helst. Förutom undantagen enligt nedan skickas inte alla objekt till parametern value som referens. Alla ändringar som görs av objektet i en arbetare, efter det att setSharedProperty() har anropats, vidarekopplas inte till den andra arbetaren. Objektet kopieras genom att det serialiseras till AMF3-format och avserialiseras till ett nytt objekt i den mottagande arbetaren. Detta medför att objekt som inte kan serialiseras till AMF3-format, inklusive visningsobjekt, inte kan skickas till parametern value. För att en anpassad klass ska kunna skickas måste klassdefinitionen registreras med flash.net.registerClassAlias()-funktionen eller med [RemoteClass]-metadata. Oberoende av teknik måste samma alias användas för båda arbetarnas versioner av klassen.

Det finns fem typer av objekt som utgör undantag från regeln att objekt inte delas mellan arbetare:

  • Arbetare 
  • MessageChannel
  • Delbar ByteArray (ett ByteArray-objekt med dess shareable-egenskap inställd på true
  • Mutex
  • Condition

Om du skickar en instans av dessa objekt till parametern value får varje arbetare en referens till samma underliggande objekt. Ändringar gjorda i en instans i en arbetare är omedelbart tillgängliga i en annan arbetare. Om du dessutom skickar samma instans av dessa objekt mer än en gång med setSharedProperty(), kommer ingen ny kopia av objektet att skapas för den mottagande arbetaren i miljön. I stället återanvänds samma referens för att minimera systemminnesbelastningen.

Genom att anropa den här metoden med null eller undefined för argumentet value rensas eventuella tidigare inställda värden för det angiva argumentet key. Att rensa ett värde på detta sätt tar bort referensen till det, vilket medför att det kan skräpinsamlas.

Du kan använda valfritt strängvärde i key-argumentet. Dessa delade egenskaper är tillgängliga för kod som har åtkomst till en arbetare. Om du vill undvika att oavsiktligt skriva över ett värde bör du överväga att använda ett prefix, suffix eller liknande för att försöka göra key-namnen unika.

Parametrar

key:String — Namnet under vilket den delade egenskapen lagras.
 
value:* — Värdet på den delade egenskapen.

Relaterade API-element

start

()metod 
public function start():void

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Startar körningen av arbetaren. I miljön skapas arbetartråden och konstruktorn för arbetar-swf-filens huvudklass anropas.

Den här åtgärden är asynkron. När arbetaren har startats ändras dess state-egenskap till WorkerState.RUNNING och en workerState-händelse skickas.

terminate

()metod 
public function terminate():Boolean

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Stoppar kodkörningen för den här arbetaren. Genom att anropa den här metoden avbryts aktuella ActionScript i arbetarens swf-fil.

Returnerar
Booleantrue om koden i arbetaren kördes och avbröts, eller false om arbetaren aldrig startades
Händelsedetaljer

workerState

Händelse
Typ av händelseobjekt: flash.events.Event
egenskap Event.type = flash.events.Event.WORKER_STATE

Språkversion: ActionScript 3.0
Körningsmiljöversioner: Flash Player 11.4, AIR 3.4

Skickas när värdet på arbetarens state-egenskap ändras.

Event.WORKER_STATE-konstanten definierar värdet på type-egenskapen i ett workerState-händelseobjekt.

Den här händelsen har följande egenskaper:

EgenskapVärde
bubblesfalse
cancelablefalse; det finns inget standardbeteende att avbryta.
currentTargetDet objekt som aktivt behandlar Event-objektet med en händelseavlyssnare.
targetDet objekt som skickade den här händelsen.
WorkerExample.as

I följande exempel visas hur ett Worker-objekt utför en uppgift i bakgrunden. Dessutom visas kommunikationen mellan den överordnade arbetaren och bakgrundsarbetaren, inklusive hur ett anpassat klassobjekt skickas mellan arbetare.

Exemplet består av tre ActionScript-klasser: WorkerExample är huvudklassen och den överordnade arbetaren. BackgroundWorker är klassen som arbetar i bakgrunden. Den är sammanställd av huvudklassen för bakgrundsarbetarens swf-fil. CountResult är en anpassad klass som används för att skicka data mellan de båda arbetarna som ett enskilt objekt i stället för som flera värden.

I detta exempel räknar en bakgrundsarbetare i en slinga upp till det antal som angivits i den överordnade arbetaren. Medan förloppet pågår skickas statusmeddelanden till den överordnade arbetaren. När så uppräkningen är klar skickar bakgrundsarbetaren ett meddelande till den överordnade arbetaren för att meddela att uppräkningen är klar och för att ange hur lång tid det tog.

Klassen WorkerExample är huvudklassen för swf-filen så den blir huvudklass för den primitiva arbetaren. I metoden initialize() skapar koden bakgrundsarbetarobjektet med hjälp av byte för BackgroundWorker-klassen, vilken är inbäddad med en [Embed]-tagg.

När bakgrundsarbetaren har skapats med anrop av WorkerDomain.createWorker(), upprättar koden kommunikationen mellan de båda arbetarna. Till att börja med skapar koden en uppsättning MessageChannel-objekt. De skickas tillbaka till bakgrundsarbetaren genom att dess setSharedProperty()-metod anropas. Slutligen registreras workerState-händelsen för bakgrundsarbetarens objektshändelse och arbetaren startas genom ett anrop av dess start()-metod.

Medan bakgrundsarbetaren utför sitt arbete skickas förloppsmeddelanden (och eventuella resultat) till den överordnade arbetaren. Den överordnade arbetaren använder den här informationen för att uppdatera förloppsfältet och textindikatorn.

package
{
    import com.adobe.example.vo.CountResult;
    
    import flash.display.Shape;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.net.registerClassAlias;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.system.WorkerState;
    import flash.text.TextField;
    import flash.text.TextFormat;
    import flash.text.TextFormatAlign;
    import flash.utils.ByteArray;
    
    public class WorkerExample extends Sprite
    {
        // ------- Embed the background worker swf as a ByteArray -------
        [Embed(source="../workerswfs/BackgroundWorker.swf", mimeType="application/octet-stream")]
        private static var BackgroundWorker_ByteClass:Class;
        public static function get BackgroundWorker():ByteArray
        {
            return new BackgroundWorker_ByteClass();
        }
        
        
        private var bgWorker:Worker;
        private var bgWorkerCommandChannel:MessageChannel;
        private var progressChannel:MessageChannel;
        private var resultChannel:MessageChannel;
        
        
        public function WorkerExample()
        {
            initialize();
        }
        
        
        private function initialize():void
        {
            // create the user interface
            setupStage();
            createStatusText();
            createProgressBar();
            
            // Register the alias so we can pass CountResult objects between workers
            registerClassAlias("com.adobe.test.vo.CountResult", CountResult);
            
            // Create the background worker
            bgWorker = WorkerDomain.current.createWorker(BackgroundWorker);
            
            // Set up the MessageChannels for communication between workers
            bgWorkerCommandChannel = Worker.current.createMessageChannel(bgWorker);
            bgWorker.setSharedProperty("incomingCommandChannel", bgWorkerCommandChannel);
            
            progressChannel = bgWorker.createMessageChannel(Worker.current);
            progressChannel.addEventListener(Event.CHANNEL_MESSAGE, handleProgressMessage)
            bgWorker.setSharedProperty("progressChannel", progressChannel);
            
            resultChannel = bgWorker.createMessageChannel(Worker.current);
            resultChannel.addEventListener(Event.CHANNEL_MESSAGE, handleResultMessage);
            bgWorker.setSharedProperty("resultChannel", resultChannel);
            
            // Start the worker
            bgWorker.addEventListener(Event.WORKER_STATE, handleBGWorkerStateChange);
            bgWorker.start();
        }
        
        
        private function handleBGWorkerStateChange(event:Event):void
        {
            if (bgWorker.state == WorkerState.RUNNING) 
            {
                _statusText.text = "Background worker started";
                bgWorkerCommandChannel.send(["startCount", 100000000]);
            }
        }
        
        
        private function handleProgressMessage(event:Event):void
        {
            var percentComplete:Number = progressChannel.receive();
            setPercentComplete(percentComplete);
            _statusText.text = Math.round(percentComplete).toString() + "% complete";
        }
        
        
        private function handleResultMessage(event:Event):void
        {
            var result:CountResult = resultChannel.receive() as CountResult;
            setPercentComplete(100);
            _statusText.text = "Counted to " + result.countTarget + " in " + (Math.round(result.countDurationSeconds * 10) / 10) + " seconds";
        }
        
        
        // ------- Create UI -------
        
        private var _currentPercentComplete:int = 0;
        private var _needsValidation:Boolean = false;
        private var _statusText:TextField;
        private var _progressBarRect:Shape;
        private var _progressBar:Shape;
        
        private function setupStage():void
        {
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.stageWidth = 800;
            stage.stageHeight = 600;
            stage.color = 0xffffff;
        }
        
        
        private function createStatusText():void
        {
            _statusText = new TextField();
            _statusText.width = 400;
            _statusText.height = 25;
            _statusText.x = (stage.stageWidth - _statusText.width) / 2;
            _statusText.y = 150;
            
            var statusTextFormat:TextFormat = new TextFormat();
            statusTextFormat.color = 0xeeeeee;
            statusTextFormat.font = "Verdana";
            statusTextFormat.align = TextFormatAlign.CENTER;
            statusTextFormat.size = 16;
            _statusText.defaultTextFormat = statusTextFormat;
            _statusText.wordWrap = false;
            _statusText.opaqueBackground = 0x999999;
            _statusText.selectable = false;
            
            _statusText.text = "Initializing...";
            
            addChild(_statusText);
        }
        
        
        private function createProgressBar():void
        {
            _progressBarRect = new Shape();
            _progressBarRect.graphics.beginFill(0x000000, 0);
            _progressBarRect.graphics.lineStyle(2, 0x000000);
            _progressBarRect.graphics.drawRect(0, 0, 400, 30);
            _progressBarRect.graphics.endFill();
            
            _progressBarRect.x = (stage.stageWidth - _progressBarRect.width) / 2;
            _progressBarRect.y = 100;
            
            addChild(_progressBarRect);
            
            _progressBar = new Shape();
            _progressBar.graphics.beginFill(0x0000ee);
            _progressBar.graphics.drawRect(0, 0, 391, 21);
            _progressBar.x = _progressBarRect.x + 4;
            _progressBar.y = _progressBarRect.y + 4;
            
            addChild(_progressBar);
            
            _progressBar.scaleX = 0;
        }
        
        private function setPercentComplete(percentComplete:int):void
        {
            if (_currentPercentComplete == percentComplete)
                return;
            
            _currentPercentComplete = percentComplete;
            invalidateValue();
        }
        
        
        private function invalidateValue():void
        {
            if (_needsValidation)
                return;
            
            _needsValidation = true;
            addEventListener(Event.EXIT_FRAME, validate);
        }
        
        private function validate(event:Event):void
        {
            removeEventListener(Event.EXIT_FRAME, validate);
            _needsValidation = false;
            
            _redrawProgressBar();
        }
        
        private function _redrawProgressBar():void
        {
            _progressBar.scaleX = _currentPercentComplete / 100;
        }
    }
}
WorkerExample.BackgroundWorker.as

Den här klassen innehåller koden för bakgrundsarbetaren. Klassen kompileras i en egen swf-fil. Den swf-filen bäddas sedan in i swf-huvudfilen.

I metoden initialize() tas de MessageChannel-objekt, som den överordnade arbetaren skickade, emot. De används för kommunikationen mellan de båda arbetarna.

Den överordnade arbetaren anropar send()-metoden på commandChannel-meddelandekanalen för att skicka ett meddelande. I bakgrundsarbetaren skickas sedan channelMessage-händelsen genom att handleCommandMessage()-metoden anropas.

Bakgrundsarbetarens faktiska arbete sker i metoden count(). Medan uppräkningen fortsätter i bakgrundsarbetaren skickas förloppsmeddelanden till den överordnade send()-metoden på MessageChannel-objektet för progressChannel. När uppräkningen är klar anropas metoden send() på MessageChannel-objektet för resultChannel.

package com.adobe.example.workers
{
    import com.adobe.example.vo.CountResult;
    
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.net.registerClassAlias;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.utils.getTimer;
    
    public class BackgroundWorker extends Sprite
    {
        private var commandChannel:MessageChannel;
        private var progressChannel:MessageChannel;
        private var resultChannel:MessageChannel;
        
        
        public function BackgroundWorker()
        {
            initialize();
        }
        
        
        private function initialize():void
        {
            registerClassAlias("com.adobe.test.vo.CountResult", CountResult);
            
            // Get the MessageChannel objects to use for communicating between workers
            // This one is for receiving messages from the parent worker
            commandChannel = Worker.current.getSharedProperty("incomingCommandChannel") as MessageChannel;
            commandChannel.addEventListener(Event.CHANNEL_MESSAGE, handleCommandMessage);
            // These are for sending messages to the parent worker
            progressChannel = Worker.current.getSharedProperty("progressChannel") as MessageChannel;
            resultChannel = Worker.current.getSharedProperty("resultChannel") as MessageChannel;
        }        
        
        
        private function handleCommandMessage(event:Event):void
        {
            if (!commandChannel.messageAvailable)
                return;
            
            var message:Array = commandChannel.receive() as Array;
            
            if (message != null && message[0] == "startCount")
            {
                count(uint(message[1]));
            }
        }
        
        
        private function count(targetValue:uint):void
        {
            var startTime:int = getTimer();
            var onePercent:uint = uint(Math.ceil(targetValue / 100));
            var oneHalfPercent:Number = onePercent / 2;
            
            var i:uint = 0;
            while (i < targetValue)
            {
                i++;
                // only send progress messages every one-half-percent milestone
                // to avoid flooding the message channel
                if (i % oneHalfPercent == 0)
                {
                    progressChannel.send(i / onePercent);
                }
            }
            
            var elapsedTime:int = getTimer() - startTime;
            var result:CountResult = new CountResult(targetValue, elapsedTime / 1000);
            resultChannel.send(result);
            
            trace("counted to", targetValue.toString(), "in", elapsedTime, "milliseconds");
        }
    }
}
WorkerExample.CountResult.as

Den här klassen definierar objektet för CountResult-värdet. Detta är en anpassad klass som skickas mellan två arbetare. För att skicka en anpassad klass mellan arbetare anropar varje arbetare metoden registerClassAlias() med samma aliasnamn.
package com.adobe.example.vo
{
    public class CountResult
    {
        public function CountResult(countTarget:uint=0, countTime:Number=0)
        {
            this.countTarget = countTarget;
            this.countDurationSeconds = countTime;
        }
        
        public var countTarget:uint;
        public var countDurationSeconds:Number;
    }
}
IOSWorkerExample.as

Stöd för samtidighet i iOS har lagts till från AIR version 19 och framåt. Allt förblir lika i Flash/AIR Android, förutom skillnader vid inläsning av SWF och överföring av bytearray till arbetaren.

1. Eftersom dynamisk inläsning av en SWF-fjärrfil som innehåller ActionScript-kod inte fungerar, måste SWF-fjärrfilen överföras till Worker som en rensad SWF-fil. 2. Det går inte att bädda in SWF-filer (med ABC-kod) med taggen [Embed] i iOS. Ytterligare arbetare skapas från en separat SWF-fil. Om du vill skapa en ny instans av Worker-klassen, skickar du en ByteArray med byte för bakgrundsarbetarens SWF-fil som ett argument till WorkerDomain-klassens createWorker()-metod.

Det finns två vanliga sätt att komma åt byten i en SWF-fil för detta ändamål i iOS: Det första sättet är att läsa in en extern SWF-fil med loader och det andra är att läsa in SWF-filen med URLLoader.

I följande exempel används API:n Loader för att läsa in SWF-filen.

package
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.display.StageAlign;
    import flash.display.StageScaleMode;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    import flash.net.URLRequest;
    import flash.system.ApplicationDomain;
    import flash.system.LoaderContext;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.system.WorkerDomain;
    import flash.text.TextField;
    import flash.text.TextFormat;

    
    public class IOSWorkerExample extends Sprite
    {
        public var worker:Worker;
        public var bm:MessageChannel;
        public var mb:MessageChannel;
        public var tf:TextField;
        public var tfrmt:TextFormat;
        
        public function IOSWorkerExample()
        {
            super();
            
            
            stage.align = StageAlign.TOP_LEFT;
            stage.scaleMode = StageScaleMode.NO_SCALE;
            
            tf=new TextField();
            tfrmt= new TextFormat()
            tfrmt.size=80;
            tf.textColor = 0xFFFFF; 
            tf.defaultTextFormat=tfrmt;
        
            addChild(tf);        
            //creating the urlRequest object that references the background worker.
            var _urlRequest:URLRequest = new URLRequest("IOSBackWorker.swf");
            var _loader:Loader = new Loader();
            var _lc:LoaderContext = new LoaderContext(false, ApplicationDomain.currentDomain, null);
            
            _loader.contentLoaderInfo.addEventListener(Event.COMPLETE,completeHandler);
            _loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,errorHandler);
            _loader.load(_urlRequest, _lc);
            
        }
        // This function is called once the swf loading is completed
        public function completeHandler(e:Event):void
        { 
            
            worker = WorkerDomain.current.createWorker(e.target.bytes);
            bm = worker.createMessageChannel(Worker.current);
            mb = Worker.current.createMessageChannel(worker);
            
            worker.setSharedProperty("btm", bm);
            worker.setSharedProperty("mtb", mb);
            //adding event handler on message receive from background
            bm.addEventListener(Event.CHANNEL_MESSAGE, onBackToMain);
            
            worker.start();  
            bm.receive(true);
            
        }
        
        public function errorHandler(e:IOErrorEvent):void
        {
            
            trace("In IO ErrorEvent Handler  "+e.text);
        }
        
        //This function is called when the main thread receives the message from the background worker.
        public function onBackToMain(event:Event):void
        {
            
            if(bm.messageAvailable)
            {
                // displaying the percentages based on the message received from the background.
                var progress:Number = bm.receive();
                trace("progress   "+progress);
                
                tf.text= progress.toString();
            }
        }
        
    }
}
IOSBackWorker.as

Eftersom koden körs när inläsningsfunktionen i Loader anropas, måste egenskapskontrollen isPrimordial användas i bakgrundsarbetaren, så som visas i exemplet.
package
{
    import flash.display.Sprite;
    import flash.system.MessageChannel;
    import flash.system.Worker;
    import flash.utils.ByteArray;
    import flash.utils.getTimer;
    
    public class IOSBackWorker extends Sprite
    {
        private var memory:ByteArray = new ByteArray();
        private var bm:MessageChannel;
        private var mb:MessageChannel;
        
        public function IOSBackWorker()
        {
            if(!Worker.current.isPrimordial)
            {
                memory.shareable = true;
                // creating objects of message channels
                bm = Worker.current.getSharedProperty("btm");
                mb = Worker.current.getSharedProperty("mtb");
                
                // calculating the percentage
                trace("message came");
                var j:Number =1;
                while (j<1000)
                {
                    for(var i=0;i<100;i++){}
                    var startTime=getTimer();
                    // adding delay
                    while (getTimer()-startTime <100);
                    
                    trace(j, (100*j)/1000);
                    var progress:Number=(100*j)/1000;
                    // sending the percentage to the main thread
                    bm.send(progress);                
                    
                    j++;
                }            
            }
        }        
    }
}




[ X ]Varför på engelska?
Innehåll i Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen är på engelska

Det är inte alla delar av Referenshandbok för ActionScript 3.0 i Adobe Flash-plattformen som översätts till alla språk. Om ett språkelement inte översätts visas det på engelska. Klassen ga.controls.HelpBox översätts till exempel inte till något språk. I den svenska versionen av referenshandboken visas därför klassen ga.controls.HelpBox på engelska.