Referência do ActionScript® 3.0 para Adobe® Flash® Platform
Início  |  Ocultar listas de Pacotes e Classes |  Pacotes  |  Classes  |  Novidades  |  Índice  |  Apêndices  |  Por que inglês?
Filtros: AIR 30.0 e anterior, Flash Player 30.0 e anterior, Flash Lite 4
Flex 4.6 e anterior, Flash Pro CS6 e anterior
Ocultar filtros
flash.system 

Worker  - AS3

Pacotesx

Nível superior
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

Elementos de linguagem

Constantes globais
Funções globais
Operadores
Instruções, palavras-chave e diretivas
Tipos especiais

Apêndices

Novidades
Erros do compilador
Avisos do compilador
Erros de runtime
Migrando para o ActionScript 3
Conjuntos de caracteres suportados
Tags MXML apenas
Elementos XML de movimento
Marcas de texto cronometradas
Lista de elementos deprecados
Constantes de Implementação de Acessibilidade
Como Usar Exemplos do ActionScript
Aspectos jurídicos
Pacoteflash.system
Classepublic final class Worker
HerançaWorker Inheritance EventDispatcher Inheritance Object

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Um objeto Worker representa um worker, que é uma instância virtual do runtime do Flash. Cada instância Worker controla e fornece acesso ao ciclo de vida e aos dados compartilhados de um worker único.

Um worker permite que você execute o código "em fundo" ao mesmo tempo em que outras operações estão em execução em outro worker (incluindo o worker swf principal). Em um contexto que não seja worker, algumas operações, por exemplo o processamento de um grande conjunto de dados em sequência, levam muito tempo para executar e impedem que o thread principal do aplicativo atualize a tela rápido o suficiente. Isso pode causar o congelamento ou travamento da tela.

O uso de um worker permite que você execute uma execução em longo tempo ou operação lenta em plano de fundo. Cada worker executa seu código em um thread separado de execução a partir de outro worker. O código de execução em longo tempo em um worker não bloqueia a execução do código em outro worker. Em vez disso, os dois conjuntos de código são executados em paralelo. Como consequência, um worker pode ser usado para executar o código em plano de fundo enquanto o thread do aplicativo principal fica livre para continuar a atualização da tela.

Este recurso de execução simultânea de múltiplos conjuntos de instrução de códigos é conhecido como concorrência.

Observação: o uso de workers para simultaneidade é suportado no Flash Player e no AIR em plataformas de desktop. Em plataformas móveis, o AIR oferece suporte para simultaneidade no Android e no iOS. Você pode usar a propriedade estática isSupported para verificar se a concorrência é suportada antes de tentar usá-la.

Não é possível criar instâncias Worker fazendo uma chamada para o construtor Worker(). Em contextos em que o uso dos workers para concorrência é suportado, na inicialização, o runtime cria automaticamente o Worker associado com o SWF principal, conhecido como worker primordial.

Todos os workers adicionais são criados a partir de um SWF diferente. Para criar uma nova instância da classe Worker, transmita um ByteArray com os bytes de um swf do worker em plano de fundo como um argumento à classe do método WorkerDomain createWorker(). Há três formas comuns para acessar os bytes de um swf para esta finalidade:

  • Utilize a metatag [Embed] para integrar o arquivo .swf ao aplicativo como um 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();
     }
  • Carregue um arquivo SWF externo usando o 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();
     }
  • Utilize um único swf como o worker primário e de fundo:

     // 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
       }
     }

Workers são executados isoladamente de todos os outros e não têm acesso à mesma memória, variáveis e código. Entretanto, há três mecanismos disponíveis para transmitir mensagens e dados entre as instâncias Worker:

  • Propriedades compartilhadas: Cada worker possui um conjunto interno de valores nomeados que podem ser definidos e lidos a partir de dentro do próprio worker ou de outros workers. Você pode definir um valor usando o método setSharedProperty() e ler um valor usando o método getSharedProperty().
  • MessageChannel: Um objeto MessageChannel permite que você envie mensagens e dados unidirecionais a partir de um worker ao outro. Código no worker de destino pode ouvir ou evento para ser notificado quando a mensagem é recebida. Para criar um objeto MessageChannel, use o método createMessageChannel().
  • ByteArray compartilhável: se propriedade shareable de um objeto ByteArray for true, a mesma memória subjacente é usada para instâncias desse ByteArray em todos os workers. Como o código em vários workers pode acessar a memória compartilhada ao mesmo tempo, seu código deve usar os mecanismos descritos na propriedade ByteArray.shareable para evitar problemas relacionados a trocas de dados inesperadas.

Diversas APIs de runtime relacionado aos mecanismos de entrada e saída do usuário em um worker de plano de fundo. Elas primariamente consistem em APIs relacionadas a entradas do usuário e mecanismos de saída ou elementos do sistema operacional como janelas e arrastar. Como regra, para qualquer API que não seja suportado em todos os contextos, use as propriedades isSupported, available e similares para verificar se o API está disponível no contexto do worker de plano de fundo antes de tentar utilizar o API.

Observação: as extensões nativas não são suportados no plano de fundo e trabalhos secundários.

Workers são úteis pois diminuem as chances de diminuição da taxa de quadros devido ao fato de o thread de aplicação de acabamento ser bloqueado por outro código. Entretanto, workers requerem memória do sistema e uso do CPU adicionais, o que pode ser mais custoso ao desempenho geral do aplicativo. Como cada worker utiliza suas próprias instâncias da máquina virtual do runtime, até mesmo o overhead de um worker comum pode ser grande. Ao utilizar workers, teste seu código em todas as plataformas de destino para garantir que as demandas sobre o sistema não sejam tão grandes. A Adobe não recomenda a utilização de mais de um ou dois workers de fundo em um cenário típico.

Veja os exemplos

Saiba mais

Elementos da API relacionados



Propriedades públicas
 PropriedadeDefinido por
 Inheritedconstructor : Object
Uma referência ao objeto de classe ou à função de construtor de uma determinada ocorrência de objeto.
Object
  current : Worker
[estático] [somente leitura] Fornece acesso ao worker que contém o código atual
Worker
  isPrimordial : Boolean
[somente leitura] Indica se o worker é o worker principal.
Worker
  isSupported : Boolean
[estático] [somente leitura] Indica se o contexto do runtime atual suporta o objeto Worker para execuções de código concorrentes.
Worker
  state : String
[somente leitura] O estado atual do worker em seu ciclo de vida.
Worker
Métodos públicos
 MétodoDefinido por
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[substituir] Registra um objeto de ouvinte de evento em um objeto EventDispatcher, de forma que o ouvinte receba a notificação de um evento.
Worker
  
Cria uma nova instância do MessageChannel pra enviar mensagens a partir do worker no qual o método é chamado a outro worker de destino.
Worker
 Inherited
Envia um evento para o fluxo de eventos.
EventDispatcher
  
Recupera um valor armazenado neste worker com uma chave nomeada.
Worker
 Inherited
Verifica se o objeto EventDispatcher tem ouvintes registrados para um tipo específico de evento.
EventDispatcher
 Inherited
Indica se um objeto tem uma propriedade especificada definida.
Object
 Inherited
Indica se uma ocorrência da classe Object está na cadeia de protótipos do objeto especificado como o parâmetro.
Object
 Inherited
Indica se a propriedade especificada existe e é enumerável.
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[substituir] Remove um ouvinte do objeto EventDispatcher.
Worker
 Inherited
Define a disponibilidade de uma propriedade dinâmica para operações de repetição.
Object
  
Fornece um valor nomeado disponível ao código em execução no swf do worker.
Worker
  
Inicia a execução do worker.
Worker
  
Interrompe a execução do código deste worker.
Worker
 Inherited
Retorna a representação da string deste objeto, formatado segundo as convenções específicas para a localidade.
Object
 Inherited
Retorna a representação de string do objeto especificado.
Object
 Inherited
Retorna o valor primitivo do objeto especificado.
Object
 Inherited
Verifica se um ouvinte de evento está registrado nesse objeto EventDispatcher ou em qualquer um de seus ancestrais para o tipo de evento especificado.
EventDispatcher
Eventos
 Evento Resumo Definido por
 Inherited[transmissão de evento] Despachado quando o Flash Player ou o aplicativo do AIR ganha o foco do sistema operacional e está se tornando inativo.EventDispatcher
 Inherited[transmissão de evento] Despachado quando o Flash Player ou o aplicativo do AIR perde o foco do sistema operacional e está se tornando inativo.EventDispatcher
  Enviado quando o valor da propriedade do estado do worker é alterado.Worker
Detalhes da propriedade

current

propriedade
current:Worker  [somente leitura]

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Fornece acesso ao worker que contém o código atual



Implementação
    public static function get current():Worker

isPrimordial

propriedade 
isPrimordial:Boolean  [somente leitura]

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Indica se o worker é o worker principal.

O worker principal é o worker no qual o swf inicial está em execução. Este worker controla o acabamento da tela.

Esta propriedade pode ser utilizada para criar a arquitetura de um aplicativo em que o worker primário e o worker de plano de fundo representam duas instâncias do mesmo arquivo swf. A alternativa é estruturar seu código de modo que o worker de plano de fundo utilize diferentes códigos compilados em um swf diferente a partir do worker primário.



Implementação
    public function get isPrimordial():Boolean

isSupported

propriedade 
isSupported:Boolean  [somente leitura]

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Indica se o contexto do runtime atual suporta o objeto Worker para execuções de código concorrentes.

Se a concorrência estiver disponível, o valor desta propriedade será true.



Implementação
    public static function get isSupported():Boolean

state

propriedade 
state:String  [somente leitura]

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

O estado atual do worker em seu ciclo de vida. Os valores possíveis desta propriedade são definidos na classe WorkerState.



Implementação
    public function get state():String

Elementos da API relacionados

Detalhes do método

addEventListener

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

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Registra um objeto de ouvinte de evento em um objeto EventDispatcher, de forma que o ouvinte receba a notificação de um evento. Você pode registrar ouvintes de eventos em todos os nós da lista de exibição de um tipo específico de evento, fase e prioridade.

Depois de registrar um ouvinte de evento com êxito, não será possível alterar a respectiva prioridade por meio de chamadas adicionais para o addEventListener(). Para alterar a prioridade de um ouvinte, chame primeiramente o removeListener(). Em seguida, você poderá registrar o ouvinte novamente com o novo nível de prioridade.

Tenha em mente que, após o ouvinte ser registrado, chamadas subsequentes para o addEventListener() com um valor type ou useCapture diferente resultarão na criação de um registro de ouvinte separado. Por exemplo, se você primeiro registrar um ouvinte com o useCapture definido como true, ele escutará apenas durante a fase de captura. Se você chamar o addEventListener() novamente, usando o mesmo objeto de ouvinte, mas com o useCapture definido como false, você terá dois ouvintes distintos: um que escuta durante a fase de captura e outro que escuta durante as fases de destino e de bubbling.

Você não pode registrar um ouvinte de evento apenas para a fase de destino ou a fase de bubbling. Essas fases são emparelhadas durante o registro porque o bubbling se aplica apenas aos ancestral do nó-alvo.

Se você não precisar mais de um ouvinte de evento, remova-o, chamando o removeEventListener(); do contrário, poderão ocorrer problemas de memória. Os ouvintes de evento não são retirados automaticamente da memória porque o coletor de lixo não remove o ouvinte enquanto o objeto de despacho existe (a menos que o parâmetro useWeakReference seja definido para true).

Copiar uma ocorrência do EventDispatcher não copia os ouvintes de eventos a ele anexados. (Se o seu recém-criado nó precisar de um ouvinte de evento, anexe o ouvinte após criar o nó). Entretanto, se você mover uma ocorrência do EventDispatcher, os ouvintes de evento anexados se movimentarão com ele.

Se o ouvinte de evento estiver sendo registrado em um nó enquanto um evento estiver sendo processado nesse nó, o ouvinte de evento não será disparado durante a fase atual, mas poderá ser disparado durante uma fase posterior no fluxo de eventos, como a fase de bubbling.

Se um ouvinte de evento for removido de um nó enquanto um evento estiver sendo processado no nó, ele ainda será disparado pelas ações atuais. Depois de removido, o ouvinte de evento nunca mais é chamado novamente (a menos que registrado mais uma vez para processamento futuro).

Parâmetros

type:String — O tipo de evento.
 
listener:Function — A função de ouvinte que processa o evento. Esta função deve aceitar um objeto Event como seu único parâmetro e não deve retornar nada, como mostra este exemplo:
function(evt:Event):void

A função pode ter qualquer nome.

 
useCapture:Boolean (default = false)Determina se o ouvinte trabalha na fase de captura ou nas fases de destino e bubbling. Se useCapture for definido como true, o ouvinte processará o evento apenas durante a fase de captura e não na fase de destino nem de bubbling. Se useCapture for false, o ouvinte processará o evento apenas durante a fase de destino ou de bubbling. Para ouvir o evento em todas as três fases, chame o addEventListener duas vezes, uma vez com o useCapture definido como true, e novamente, com o useCapture definido como false.
 
priority:int (default = 0) — O nível de prioridade do ouvinte de evento. A prioridade é designada por um número inteiro de 32 bits sem sinal. Quanto mais alto o número, maior a prioridade. Todos os ouvintes com prioridade n são processados antes dos ouvintes com prioridade n-1. Se dois ou mais ouvintes compartilham a mesma prioridade, eles são processados pela ordem segundo a qual foram adicionados. A prioridade padrão é 0.
 
useWeakReference:Boolean (default = false) — Determina se a referência ao ouvinte é forte ou fraca. Uma referência forte (a padrão) impede que o ouvinte seja coletado como lixo. Uma referência fraca não impede.

Funções de membro de nível de classe não estão sujeitas à coleta de lixo, portanto, você pode definir useWeakReference como true para funções de membro de nível de classe sem sujeitá-las à coleta de lixo. Se você definir useWeakReference como true para um ouvinte que seja uma função interna aninhada, a função será sujeita à coleta de lixo e não mais será persistente. Se você criar referências à função interna (salve-a em outra variável), então ela não ficará sujeita à coleta de lixo e permanece persistente.

createMessageChannel

()método 
public function createMessageChannel(receiver:Worker):MessageChannel

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Cria uma nova instância do MessageChannel pra enviar mensagens a partir do worker no qual o método é chamado a outro worker de destino. Código no worker que cria o objeto MessageChannel pode usá-lo para enviar mensagens unidirecionais ao objeto Worker especificado como argumento receiver.

Embora a instância do MessageChannel possa ser utilizada para enviar mensagens e dados de uma instância Worker a outra, ao menos uma instância MessageChannel precisa ser transmitida a um worker filho como uma propriedade compartilhada através de uma chamada ao método setSharedProperty() do objeto Worker.

    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);

Parâmetros

receiver:Worker — O worker que receberá mensagens transmitidas através do canal de mensagens criado.

Retorna
MessageChannel — O objeto MessageChannel criado pela operação

getSharedProperty

()método 
public function getSharedProperty(key:String):*

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Recupera um valor armazenado neste worker com uma chave nomeada.

Código em um worker filho pode efetuar uma chamada a esse método para recuperar um valor já no construtor da classe principal do swf worker.

Parâmetros

key:String — Nome da propriedade compartilhada a ser recuperada

Retorna
* — O valor da propriedade compartilhada armazenada com uma chave específica, ou null se nenhum valor for armazenado para a chave especificada.

removeEventListener

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

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Remove um ouvinte do objeto EventDispatcher. Se não existir um ouvinte correspondente registrado com o objeto EventDispatcher, uma chamada para esse método não terá efeito.

Parâmetros

type:String — O tipo de evento.
 
listener:Function — O objeto de ouvinte a remover.
 
useCapture:Boolean (default = false)Especifica se o ouvinte foi registrado na fase de captura ou nas fases de destino e bubbling. Se o ouvinte foi registrado para as fases de destino e de bubbling, duas chamadas para o removeEventListener() serão necessárias para remover as duas, uma chamada com o useCapture() definido como true e outra chamada com o useCapture() definido como false.

setSharedProperty

()método 
public function setSharedProperty(key:String, value:*):void

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Fornece um valor nomeado disponível ao código em execução no swf do worker.

Você pode efetuar uma chamada a este método antes de efetuar uma chamada ao método start() do worker. Neste caso, a propriedade compartilhada está disponível para codificar no swf do worker no momento da construção.

O valor passou ao parâmetro value pode ser qualquer objeto. Diferentemente das exceções descritas abaixo, qualquer objeto transmitido ao parâmetro value não é transmitido por referência. Qualquer alteração feita no objeto em um worker após a chamada ao setSharedProperty() não é transportada ao outro worker. O objeto é copiado quando é criado em série ao formato AMF3 e removido da série em um novo objeto, no worker de destino. Por este motivo, qualquer objeto que puder ser criado em série em um formato AMF3, incluindo os objetos em exibição, não podem ser transmitidos ao parâmetro value. Para transmitir de forma adequada uma classe personalizada, a definição da classe pode ser registrada usando a função flash.net.registerClassAlias() ou o metadado [RemoteClass]. Com tais técnicas, o mesmo alias pode ser usado para ambas as versões do worker da classe.

Há cinco tipos de objetos que uma exceção à regra de que os objetos não são compartilhados entre os workers:

  • O trabalhador 
  • MessageChannel
  • ByteArray compartilhável (um objeto ByteArray com a propriedade shareable definida como true
  • Mutex
  • Condição

Se você transmitir uma instância destes objetos ao parâmetro value, cada worker terá uma referência ao mesmo objeto adjacente. As alterações feitas a uma instância em um worker são imediatamente disponíveis em outros workers. Além disso, se você transportar a mesma instância desses objetos mais de uma vez usando setSharedProperty(), o runtime não criará uma nova cópia do objeto no worker de destino. Em vez disso, a mesma referência é reutilizada, reduzindo o uso da memória do sistema.

Efetuar uma chamada a este método com null ou undefined para o argumento value limpa qualquer valor determinado anteriormente para o argumento key especificado. Limpar um valor desta maneira remove a referência a ele, permitindo que o lixo seja coletado.

Você pode usar qualquer valor String no argumento key. Estas propriedades compartilhadas estão disponíveis para qualquer código que tenha acesso ao worker. Para evitar a sobrescrição não intencional de um valor, considere o uso de um prefixo, sufixo ou mecanismo similar para tentar tonar os nomes principais únicos.

Parâmetros

key:String — O nome sob o qual a propriedade compartilhada é armazenado.
 
value:* — O valor da propriedade compartilhada.

Elementos da API relacionados

start

()método 
public function start():void

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Inicia a execução do worker. O runtime cria um thread o worker e efetua uma chamada ao construtor da classe principal do swf do worker.

Esta operação é assíncrona. Assim que a inicialização do worker estiver concluída, ele altera sua propriedade state para WorkerState.RUNNING e envia um evento workerState.

terminate

()método 
public function terminate():Boolean

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Interrompe a execução do código deste worker. Efetuar uma chamada a este método aborta qualquer ActionScript atual no swf do worker.

Retorna
Booleantrue se o código no worker estiver em execução e for interrompido, ou false se o worker nunca for inicializado.
Detalhe do evento

workerState

Evento
Tipo do objeto de evento: flash.events.Event
propriedade Event.type = flash.events.Event.WORKER_STATE

Versão da linguagem: ActionScript 3.0
Versões de runtime: Flash Player 11.4, AIR 3.4

Enviado quando o valor da propriedade state do worker é alterado.

A constante Event.WORKER_STATE define o valor do tipo de propriedade type de um objeto de evento workerState.

Esse evento tem as seguintes propriedades:

PropriedadeValor
bubblesfalse
cancelablefalse; não há comportamento padrão a ser cancelado.
currentTargetO objeto que está processando ativamente o objeto Event com um ouvinte de evento.
targetO objeto que despachou este evento.
WorkerExample.as

Os exemplos a seguir demonstram como usar o objeto Worker para executar uma tarefa no plano de fundo. Também mostra a comunicação entre o worker pai e o worker de plano de fundo, incluindo a transmissão de um objeto de classe personalizado entre os funcionários.

Este exemplo é composto por três classes ActionScript: WorkerExample é a classe principal e, também, o worker pai. BackgroundWorker é a classe que executa a tarefa de plano de fundo. É traduzida como a classe principal do swf do worker de plano de fundo. CountResult é uma classe personalizada utilizada para transmitir os dados entre os dois workers como um objeto único, não como valores múltiplos.

Neste exemplo, o worker de plano de fundo conta com uma repetição máxima, com um número especificado pelo worker pai. À medida que progrido em seu trabalho, envia mensagens de progresso o worker pai. Por fim, quando a contagem é finalizada, o worker de plano de fundo envia uma mensagem ao worker pai notificando sobre a conclusão e o tempo gasto na contagem.

A classe WorkerExample é a classe principal do swf, sendo assim é a classe principal do worker principal. No método initialize(), o código cria o objeto worker de plano de fundo utilizando os bytes da classe BackgroundWorker, que são incorporados usando uma tag [Embed].

Após a criação de um worker de plano de fundo através de uma chamada ao WorkerDomain.createWorker(), o código define a comunicação entre os workers. O primeiro código cria um conjunto de objetos MessageChannel. Ele transporta esses conjuntos ao worker de plano de fundo efetuando uma chamada ao método setSharedProperty(). Finalmente, faz um registro para o evento workerState do objeto Worker e inicia o worker efetuando uma chamada ao método start().

À medida que o worker de plano de fundo executa sua tarefa, envia mensagens de progresso (e, ao final, o resultado) ao worker pai. O worker pai utiliza estas informações para atualizar a barra de progresso e o indicador de texto.

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

Essa classe contém o código para o worker de plano de fundo. Essa classe é compilada em seu próprio arquivo swf. Aquele arquivo swf é, então, incorporado ao swf principal.

No método initialize(), ele recebe os objetos MessageChannel transmitidos pelo worker pai. Eles são utilizados para a comunicação entre os dois workers.

O worker pai efetua uma chamada ao método send() no canal de mensagem commandChannel para enviar uma mensagem. Dentro do worker de plano de fundo, o runtime envia o evento channelMessage efetuando uma chamada ao método handleCommandMessage().

A tarefa verdadeira do worker de plano de fundo ocorre no método count(). À medida que o worker de plano de fundo prossegue com sua contagem, envia mensagens de progresso ao worker pai efetuando uma chamada ao método send() no objeto MessageChannel progressChannel. Ao finalizar a contagem, efetua uma chamada ao método send() no objeto MessageChannel 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

Essa classe define o objeto de valor CountResult. Trata-se de uma classe personalizada que é transmitida entre os dois workers. Com o intuito de transmitir uma classe personalizada entre os workers, cada worker efetua uma chamada ao método registerClassAlias() usando o nome do mesmo alias.
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

O suporte de simultaneidade para iOS foi adicionado à versão 19 do AIR e em versões posteriores. Tudo permanece consistente com o Flash/AIR Android, exceto as diferenças no carregamento do SWF e na matriz de transmissão de bytes para o worker.

1. Como não é possível carregar dinamicamente um SWF remoto que contém o código ActionScript, o SWF remoto precisa ser transmitido para o worker como um arquivo SWF sem código. 2. Não é possível incorporar SWFs (que utilizam o código ABC) usando a tag [Embed] no iOS. Todos os workers adicionais são criados a partir de um SWF diferente. Para criar uma nova instância da classe Worker, transfira um ByteArray com os bytes do SWF do worker em segundo plano como um argumento para a classe do método WorkerDomain createWorker().

Há duas maneiras comuns de acessar os bytes de um SWF para esta finalidade no iOS: a primeira é usar oLoader para carregar um arquivo SWF externo, e a segunda é usar o URLLoader para carregar o arquivo SWF.

O exemplo a seguir usa a API do Loader para carregar o arquivo SWF.

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

Durante execução do código na função de carregamento do Loader é necessário colocar uma verificação de propriedade isPrimordial no worker em segundo plano, conforme mostra este exemplo.
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 ]Por que inglês?
O conteúdo na Referência do ActionScript 3.0 aparece em inglês

Nem todas as partes da Referência do ActionScript 3.0 estão traduzidas em todos os idiomas. Quando um elemento de um idioma não está traduzido, ele é exibido em inglês. Por exemplo, a classe ga.controls.HelpBox não está traduzida em nenhum idioma. Por isso, na versão da referência em português do Brasil, a classe ga.controls.HelpBox é exibida em inglês.