ActionScript® 3.0 Referenzhandbuch für die Adobe® Flash®-Plattform
Home  |  Liste der Pakete und Klassen ausblenden |  Pakete  |  Klassen  |  Neue Funktionen  |  Stichwortverzeichnis  |  Anhänge  |  Warum auf Englisch?
Filter: AIR 30.0 und früher, Flash Player 30.0 und früher, Flash Lite 4
Flex 4.6 und früher, Flash Pro CS6 und früher
Filter ausblenden
flash.system 

Worker  - AS3

Paketex

Oberste Ebene
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

Sprachelemente

Globale Konstanten
Globale Funktionen
Operatoren
Anweisungen, Schlüsselwörter und Direktiven
Sondertypen

Anhänge

Neue Funktionen
Compiler-Fehler
Compiler-Warnungen
Laufzeitfehler
Migration zu ActionScript 3
Unterstützte Zeichensätze
Nur MXML-Tags
Motion-XML-Elemente
Timed Text-Tags
Liste veralteter Elemente
Konstanten für die Implementierung von Eingabehilfen
Verwendung der ActionScript-Beispiele
Rechtliche Hinweise
Paketflash.system
Klassepublic final class Worker
VererbungWorker Inheritance EventDispatcher Inheritance Object

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Ein Worker-Objekt repräsentiert einen Worker, was eine virtuelle Instanz der Flash-Laufzeitumgebung ist. Jede Worker-Instanz ermöglicht die Kontrolle und den Zugriff auf den Lebenszyklus und die gemeinsam genutzten Daten eines einzelnen Workers.

Ein Worker ermöglicht Ihnen, Code im Hintergrund auszuführen, während gleichzeitig in einem anderen Worker (auch im Worker der Haupt-SWF-Datei) andere Operationen ausgeführt werden. Wenn keine Worker verwendet werden, kann zum Beispiel das Verarbeiten großer Datenmengen in einer Schleife so lange dauern, dass der Hauptanwendungsthread den Bildschirm nicht schnell genug aktualisieren kann. Dies kann zu stockenden Bildern oder dem Einfrieren der Anzeige führen.

Mithilfe eines Workers können Sie lang dauernde oder langsame Operationen im Hintergrund ausführen. Jeder Worker führt seinen Code in einem separaten Ausführungsthread aus. Code mit einer langen Ausführungsdauer in einem Worker verhindert nicht, dass Code in einem anderen Worker ausgeführt werden kann. Die beiden Codesets werden vielmehr gleichzeitig (parallel) ausgeführt. Deshalb kann ein Worker verwendet werden, um Code im Hintergrund auszuführen, während der Hauptanwendungsthread ungehindert den Bildschirm aktualisieren kann.

Diese Fähigkeit, mehrere Sätze von Codeanweisungen simultan auszuführen, wird Parallelität oder Gleichzeitigkeit genannt.

Hinweis: Die Verwendung von Workern für die Parallelität wird in Flash Player und in AIR auf Desktopplattformen unterstützt. Für mobile Plattformen wird Parallelität in AIR unter Android und iOS unterstützt. Mit der statischen Eigenschaft isSupported können Sie überprüfen, ob Parallelität unterstützt wird, bevor Sie versuchen, diese zu verwenden.

Sie erstellen Worker-Instanzen nicht direkt, indem Sie den Worker()-Konstruktor aufrufen. Wenn die Verwendung von Workern für die Parallelität unterstützt wird, erstellt die Laufzeitumgebung beim Starten automatisch den Worker, der der Haupt-SWF-Datei zugeordnet ist und ursprünglicher Worker genannt wird.

Jeder weitere Worker wird aus einer separaten SWF-Datei erstellt. Um eine neue Instanz der Worker-Klasse zu erstellen, übergeben Sie ein ByteArray mit den Bytes der SWF-Datei des Hintergrundworkers als Argument an die createWorker()-Methode der WorkerDomain-Klasse. Es gibt drei gebräuchliche Wege, um zu diesem Zweck auf die Bytes einer SWF-Datei zuzugreifen:

  • Verwenden Sie das [Embed]-Metatag, um die SWF-Datei als ByteArray in die Anwendung einzubetten:

     // 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();
     }
  • Laden Sie eine externe SWF-Datei unter Verwendung eines 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();
     }
  • Verwenden Sie eine einzelne SWF-Datei sowohl als ursprünglichen Worker als auch als Hintergrundworker:

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

Worker werden isoliert voneinander ausgeführt und haben keinen Zugriff auf denselben Arbeitsspeicher, dieselben Variablen oder denselben Code. Es sind jedoch drei Mechanismen verfügbar, um Nachrichten und Daten zwischen Worker-Instanzen zu übergeben:

  • Gemeinsame Eigenschaften: Jeder Worker verfügt über einen internen Satz benannter Variablen, die sowohl im Worker selbst als auch von anderen Workern festgelegt und gelesen werden können. Sie können einen Wert mit der setSharedProperty()-Methode festlegen und mit der getSharedProperty()-Methode abrufen.
  • MessageChannel: Mithilfe eines MessageChannel-Objekts können Sie Nachrichten und Daten von einem Worker zu einem anderen senden (nur in einer Richtung). Code im empfangenden Worker kann einen Listener für ein Ereignis verwenden, um beim Eingehen einer Nachricht benachrichtigt zu werden. Um ein MessageChannel-Objekt zu erstellen, verwenden Sie die createMessageChannel()-Methode.
  • Gemeinsam nutzbares ByteArray: Wenn die shareable-Eigenschaft eines ByteArray-Objekts den Wert true hat, wird der gleiche zugrunde liegende Speicher für Instanzen dieses ByteArray-Objekts in allen Workern verwendet. Da der Code in mehreren Workern gleichzeitig auf den gemeinsamen Speicher zugreifen kann, muss Ihr Code die Mechanismen verwenden, die für die ByteArray.shareable-Eigenschaft beschrieben werden, um Probleme mit unerwarteten Datenänderungen zu vermeiden.

Verschiedene Laufzeit-APIs sind in Code, der in einem Hintergrundworker ausgeführt wird, nicht verfügbar. Dies sind hauptsächlich APIs, die mit der Benutzereingabe und Ausgabemechanismen zu tun haben, oder Betriebssystemelemente wie Fenster und Ziehen. Für eine API, die nicht in allen Kontexten unterstützt wird, sollten Sie isSupported, available und ähnliche Eigenschaften verwenden, um zu überprüfen, ob die API im Hintergrundworkerkontext verfügbar ist, bevor Sie versuchen, die API zu verwenden.

Hinweis: Native Erweiterungen werden nicht für Hintergrund und sekundäre Mitarbeiter unterstützt.

Worker sind hilfreich, da sie die Wahrscheinlichkeit verringern, dass die Framerate aufgrund der Blockierung des Hauptrenderingthreads durch anderen Code abfällt. Auf der anderen Seite erfordern Worker zusätzlichen Systemarbeitsspeicher und CPU-Rechenleistung, was die allgemeine Anwendungsleistung verringern kann. Da jeder Worker seine eigene Instanz der virtuellen Maschine der Laufzeitumgebung verwendet, kann der Mehraufwand auch bei trivialen Workern erheblich ins Gewicht fallen. Wenn Sie Worker verwenden, testen Sie Ihren Code auf allen Zielplattformen, um sicherzustellen, dass die Anforderungen an das System nicht zu groß sind. Adobe empfiehlt, in einem typischen Szenario nicht mehr als ein oder zwei Hintergrundworker zu verwenden.

Beispiele anzeigen

Weitere Informationen

Verwandte API-Elemente



Öffentliche Eigenschaften
 EigenschaftDefiniert von
 Inheritedconstructor : Object
Ein Verweis auf das Klassenobjekt oder die Konstruktorfunktion für eine angegebene Objektinstanz.
Object
  current : Worker
[statisch] [schreibgeschützt] Ermöglicht den Zugriff auf den Worker, der den aktuellen Code enthält
Worker
  isPrimordial : Boolean
[schreibgeschützt] Gibt an, ob dieser Worker der ursprüngliche Worker ist.
Worker
  isSupported : Boolean
[statisch] [schreibgeschützt] Gibt an, ob die aktuelle Laufzeitumgebung die Verwendung von Worker-Objekten für die gleichzeitige Codeausführung (Parallelität) unterstützt.
Worker
  state : String
[schreibgeschützt] Der aktuelle Zustand des Workers in seinem Lebenszyklus.
Worker
Öffentliche Methoden
 MethodeDefiniert von
  
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
[override] Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird.
Worker
  
Erstellt eine neue MessageChannel-Instanz, um Nachrichten von dem Worker, bei dem die Methode aufgerufen wurde, an einen anderen (empfangenden) Worker zu senden.
Worker
 Inherited
Sendet ein Ereignis in den Ereignisablauf.
EventDispatcher
  
Ruft einen Wert ab, der mit einem benannten Schlüssel in diesem Worker gespeichert ist.
Worker
 Inherited
Überprüft, ob das EventDispatcher-Objekt Listener für einen bestimmten Ereignistyp registriert hat.
EventDispatcher
 Inherited
Gibt an, ob für ein Objekt eine bestimmte Eigenschaft definiert wurde.
Object
 Inherited
Gibt an, ob eine Instanz der Object-Klasse in der Prototypkette des Objekts vorhanden ist, das als Parameter angegeben wurde.
Object
 Inherited
Gibt an, ob die angegebene Eigenschaft vorhanden ist und durchlaufen werden kann.
Object
  
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
[override] Entfernt einen Listener aus dem EventDispatcher-Objekt.
Worker
 Inherited
Legt die Verfügbarkeit einer dynamischen Eigenschaft für Schleifenoperationen fest.
Object
  
Stellt einen benannten Wert bereit, der für Code verfügbar ist, der in der SWF-Datei des Workers ausgeführt wird.
Worker
  
Beginnt mit der Ausführung des Workers.
Worker
  
Beendet die Ausführung des Workercodes.
Worker
 Inherited
Gibt die Stringdarstellung dieses Objekts zurück, formatiert entsprechend den Konventionen des Gebietsschemas.
Object
 Inherited
Gibt das angegebene Objekt als String zurück.
Object
 Inherited
Gibt den Grundwert des angegebenen Objekts zurück.
Object
 Inherited
Überprüft, ob bei diesem EventDispatcher-Objekt oder bei einem seiner Vorgänger ein Ereignis-Listener für einen bestimmten Ereignistyp registriert ist.
EventDispatcher
Ereignisse
 Ereignis Übersicht Definiert von
 Inherited[broadcast event] Wird ausgelöst, wenn Flash Player oder eine AIR-Anwendung den Betriebssystemfokus erhält und aktiv wird.EventDispatcher
 Inherited[broadcast event] Wird ausgelöst, wenn Flash Player- oder die AIR-Anwendung den Fokus verliert und inaktiv wird.EventDispatcher
  Wird abgesetzt, wenn sich der Wert der state-Eigenschaft des Workers ändert.Worker
Eigenschaftendetails

current

Eigenschaft
current:Worker  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Ermöglicht den Zugriff auf den Worker, der den aktuellen Code enthält



Implementierung
    public static function get current():Worker

isPrimordial

Eigenschaft 
isPrimordial:Boolean  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Gibt an, ob dieser Worker der ursprüngliche Worker ist.

Der ursprüngliche Worker ist der Worker, in dem die erste SWF-Datei ausgeführt wird. Dieser Worker steuert das Rendern des Bildschirms.

Diese Eigenschaft kann verwendet werden, um eine Anwendung zu entwerfen, in der der ursprüngliche Worker und der Hintergrundworker zwei Instanzen derselben SWF-Datei sind. Alternativ dazu können Sie Ihren Code auch so aufbauen, dass der Hintergrundworker anderen Code verwendet, der in eine andere SWF-Datei des ursprünglichen Workers kompiliert wird.



Implementierung
    public function get isPrimordial():Boolean

isSupported

Eigenschaft 
isSupported:Boolean  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Gibt an, ob die aktuelle Laufzeitumgebung die Verwendung von Worker-Objekten für die gleichzeitige Codeausführung (Parallelität) unterstützt.

Wenn Parallelität unterstützt wird, hat diese Eigenschaft den Wert true.



Implementierung
    public static function get isSupported():Boolean

state

Eigenschaft 
state:String  [schreibgeschützt]

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Der aktuelle Zustand des Workers in seinem Lebenszyklus. Die möglichen Werte für diese Eigenschaft werden in der WorkerState-Klasse definiert.



Implementierung
    public function get state():String

Verwandte API-Elemente

Methodendetails

addEventListener

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Registriert ein Ereignis-Listener-Objekt bei einem EventDispatcher-Objekt, sodass der Listener über ein Ereignis benachrichtigt wird. Sie können Ereignis-Listener bei allen Knoten in der Anzeigeliste für eine bestimmte Art von Ereignis, Phase oder Priorität registrieren.

Nachdem Sie einen Ereignis-Listener erfolgreich registriert haben, können Sie seine Priorität nicht durch weitere Aufrufe von addEventListener() ändern. Um die Priorität eines Listeners zu ändern, müssen Sie zunächst removeListener() aufrufen. Anschließend können Sie den Listener mit der neuen Prioritätsstufe erneut aufrufen.

Nach der Registrierung des Listeners haben nachfolgende Aufrufe von addEventListener() mit einem anderen type- oder useCapture-Wert eine separate Listener-Registrierung zur Folge. Wenn Sie beispielsweise zuerst einen Listener registrieren, für den useCapture auf true gesetzt ist, wird dieser nur während der Aufnahmephase aktiv sein. Wenn Sie addEventListener() für dasselbe Listener-Objekt erneut aufrufen, diesmal aber useCapture auf false gesetzt ist, werden zwei separate Listener angelegt: einer, der während der Aufnahmephase aktiv ist und ein zweiter, der während der Ziel- und Bubbling-Phase aktiv ist.

Sie können einen Ereignis-Listener nicht nur für die Ziel- oder Bubbling-Phase registrieren. Die beiden Phasen hängen während der Registrierung immer zusammen, da Bubbling nur für übergeordnete Elemente des Zielknotens gilt.

Wenn Sie einen Ereignis-Listener nicht mehr brauchen, entfernen sie ihn, indem Sie removeEventListener() aufrufen. Andernfalls könnte es zu Speicherproblemen kommen. Ereignis-Listener werden nicht automatisch aus dem Speicher entfernt, da der Garbage Collector den Listener nicht entfernt, solange das auslösende Objekt vorhanden ist (sofern der useWeakReference-Parameter auf true gesetzt ist).

Beim Kopieren einer EventDispatcher-Instanz werden zugewiesene Ereignis-Listener nicht kopiert. (Wenn ein neu angelegter Knoten einen Ereignis-Listener benötigt, müssen Sie den Listener nach dem Erstellen des Knotens zuweisen.) Wenn Sie jedoch eine EventDispatcher-Instanz verschieben, werden zugewiesene Ereignis-Listener ebenfalls verschoben.

Wenn der Ereignis-Listener bei einem Knoten registriert wird, während mit diesem Knoten ein Ereignis durchgeführt wird, so wird der Ereignis-Listener während der aktuellen Phase nicht ausgelöst, kann aber während einer späteren Phase im Ereignisablauf ausgelöst werden, etwa während der Bubbling-Phase.

Wird ein Ereignis-Listener von einem Knoten entfernt, während mit dem Knoten ein Ereignis durchgeführt wird, so wird er von den aktuellen Aktionen immer noch ausgelöst. Nachdem er entfernt worden ist, wird der Ereignis-Listener nicht wieder aufgerufen (es sei denn er wird für spätere Verarbeitungsvorgänge erneut aufgerufen).

Parameter

type:String — Der Ereignistyp.
 
listener:Function — Die Listener-Funktion, die das Ereignis verarbeitet. Diese Funktion muss ein Ereignisobjekt als einzigen Parameter akzeptieren und darf keinen Wert zurückgeben, wie das nachfolgende Beispiel zeigt:
function(evt:Event):void

Der Name der Funktion ist beliebig.

 
useCapture:Boolean (default = false)Bestimmt, ob der Listener in der Erfassungsphase oder in der Ziel- und Bubbling-Phase arbeitet. Ist useCapture auf true gesetzt, so verarbeitet der Listener das Ereignis nur während der Erfassungsphase und nicht während der Ziel- oder Bubbling-Phase. Hat useCapture hingegen den Wert false, verarbeitet der Listener das Ereignis nur während der Ziel- oder Bubbling-Phase. Um auf das Ereignis in allen drei Phasen zu warten, rufen Sie addEventListener() zweimal auf; einmal ist useCapture auf true gesetzt, und beim zweiten Mal hat useCapture den Wert false.
 
priority:int (default = 0) — Die Prioritätsstufe des Ereignis-Listeners. Die Priorität wird durch eine vorzeichenbehaftete 32-Bit-Ganzzahl zugewiesen. Je höher die Zahl, desto höher die Priorität. Alle Listener mit der Priorität n werden vor Listenern mit der Priorität n -1 verarbeitet. Wenn zwei oder mehr Listener die gleiche Priorität aufweisen, werden sie in der Reihenfolge verarbeitet, in der sie hinzugefügt wurden. Die Standardpriorität ist 0.
 
useWeakReference:Boolean (default = false) — Bestimmt, ob der Verweis auf den Listener stark oder schwach ist. Ein starker Verweis (der Standard) verhindert, dass der Listener von einem Garbage Collector entfernt wird. Ein schwacher Verweis hingegen nicht.

Funktionen von Mitgliedern auf Klassenebene werden nicht vom Garbagekollektor entfernt. Daher können Sie useWeakReference für Mitgliedsfunktionen auf Klassenebene auf true setzen, ohne dass sie vom Garbagekollektor entfernt werden. Wenn Sie useWeakReference auf true setzen bei einem Listener, der eine verschachtelte innere Funktion ist, wird die Funktion vom Garbagekollektor entfernt. Indem Sie Verweise auf die innere Funktion erstellen (d. h sie in einer anderen Variable speichern), umgehen Sie die Garbage Collection, sodass die Funktion permanent gespeichert bleibt.

createMessageChannel

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Erstellt eine neue MessageChannel-Instanz, um Nachrichten von dem Worker, bei dem die Methode aufgerufen wurde, an einen anderen (empfangenden) Worker zu senden. Code in dem Worker, der das MessageChannel-Objekt erstellt, kann es verwenden, um unidirektionale Nachrichten an das als receiver-Argument angegebene Worker-Objekt zu senden.

Eine MessageChannel-Instanz kann zwar verwendet werden, um Nachrichten und Daten von einer Worker-Instanz an eine andere zu senden, es muss jedoch mindestens eine MessageChannel-Instanz als gemeinsam genutzte Eigenschaft an einen untergeordneten Worker übergeben werden, indem die setSharedProperty()-Methode des Worker-Objekts aufgerufen wird.

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

Parameter

receiver:Worker — Der Worker, der Nachrichten empfängt, die über den erstellen Nachrichtenkanal übertragen werden

Rückgabewerte
MessageChannel — Das MessageChannel-Objekt, das bei diesem Vorgang erstellt wird

getSharedProperty

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Ruft einen Wert ab, der mit einem benannten Schlüssel in diesem Worker gespeichert ist.

Code in einem untergeordneten Worker kann diese Methode aufrufen, um einen Wert abzurufen. Dies kann sogar schon im Konstruktor der SWF-Hauptklasse des Workers erfolgen.

Parameter

key:String — Der Name der abzurufenden gemeinsam genutzten Eigenschaft

Rückgabewerte
* — Der Wert der gemeinsam genutzten Eigenschaft, der mit dem angegebenen Schlüssel gespeichert wurde, oder null, falls kein Wert für den angegebenen Schlüssel gespeichert wurde

removeEventListener

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Entfernt einen Listener aus dem EventDispatcher-Objekt. Wenn kein entsprechender Listener mit dem EventDispatcher-Objekt registriert ist, hat ein Aufruf dieser Methode keine Auswirkungen.

Parameter

type:String — Der Ereignistyp.
 
listener:Function — Das zu entfernende Listener-Objekt.
 
useCapture:Boolean (default = false)Gibt an, ob der Listener für die Erfassungsphase oder die Ziel- und Bubbling-Phase registriert wurde. Wenn der Listener sowohl für die Aufnahme- als auch für die Bubbling-Phase registriert wurde, sind auch zwei Aufrufe von removeEventListener() erforderlich, um beide zu entfernen: ein Aufruf, bei dem useCapture auf true gesetzt ist, und einer, bei dem useCapture auf false gesetzt ist.

setSharedProperty

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

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Stellt einen benannten Wert bereit, der für Code verfügbar ist, der in der SWF-Datei des Workers ausgeführt wird.

Sie können diese Methode aufrufen, bevor Sie die start()-Methode des Workers aufrufen. In diesem Fall ist die gemeinsam genutzte Eigenschaft zur Konstruktionszeit für den Code in der SWF-Datei des Workers verfügbar.

Der Wert, der an den value-Parameter übergeben wird, kann ein nahezu beliebiges Objekt sein. Abgesehen von den unten aufgeführten Ausnahmen, werden Objekte, die an den value-Parameter übergeben werden, nicht als Verweis übergeben. Alle Änderungen, die nach dem setSharedProperty()-Aufruf an einem Objekt in einem Worker vorgenommen werden, werden nicht an den anderen Worker übertragen. Das Objekt wird kopiert, indem es in das AMF3-Format serialisiert und im empfangenden Worker in ein neues Objekt deserialisiert wird. Aus diesem Grund können Objekte, die nicht im AMF3-Format serialisiert werden können, zum Beispiel Anzeigeobjekte, nicht an den value-Parameter übergeben werden. Damit eine benutzerdefinierte Klasse korrekt übergeben werden kann, muss die Klassendefinition mit der flash.net.registerClassAlias()-Funktion oder unter Verwendung von [RemoteClass]-Metadaten registriert werden. Bei beiden Techniken muss derselbe Alias für die Klassenversionen beider Worker verwendet werden.

Es gibt fünf Objekttypen, die eine Ausnahme der Regel darstellen, dass Objekte nicht von Workern gemeinsam genutzt werden:

  • Worker
  • MessageChannel
  • gemeinsam nutzbares ByteArray (ein ByteArray-Objekt, dessen shareable-Eigenschaft auf true eingestellt ist
  • Mutex
  • Condition

Wenn Sie eine Instanz dieser Objekte an den value-Parameter übergeben, hat jeder Worker einen Verweis auf dasselbe zugrunde liegende Objekt. Änderungen, die in einem Worker an einer Instanz vorgenommen werden, sind sofort auch in den anderen Workern verfügbar. Wenn Sie dieselbe Instanz dieser Objekte mehrmals mit setSharedProperty() übergeben, erstellt die Laufzeitumgebung keine neue Kopie des Objekts im empfangenden Worker. Stattdessen wird derselbe Verweis erneut verwendet, sodass der Arbeitsspeicher weniger belastet wird.

Mit dem Aufruf dieser Methode mit null oder undefined für das value-Argument wird jeder zuvor festgelegte Wert für das angegebene key-Argument gelöscht. Wenn ein Wert auf diese Weise gelöscht wird, wird der Verweis darauf entfernt, sodass er speicherbereinigt werden kann.

Sie können einen beliebigen Stringwert im key-Argument verwenden. Diese gemeinsam genutzten Eigenschaften stehen jedem Code zur Verfügung, der Zugriff auf einen Worker hat. Um das versehentliche Überschreiben eines Werts zu vermeiden, könnten Sie ein Präfix oder Suffix bzw. einen ähnlichen Mechanismus verwenden, sodass Ihre Schlüsselnamen eindeutig sind.

Parameter

key:String — Der Name, unter dem die gemeinsam genutzte Eigenschaft gespeichert ist.
 
value:* — Der Wert der gemeinsam genutzten Eigenschaft.

Verwandte API-Elemente

start

()Methode 
public function start():void

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Beginnt mit der Ausführung des Workers. Die Laufzeitumgebung erstellt den Workerthread und ruft den Konstruktor der Hauptklasse der SWF-Datei des Workers auf.

Dieser Vorgang ist asynchron. Nachdem der Workerstart abgeschlossen ist, ändert der Worker seine state-Eigenschaft zu WorkerState.RUNNING und setzt ein workerState-Ereignis ab.

terminate

()Methode 
public function terminate():Boolean

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Beendet die Ausführung des Workercodes. Mit dem Aufruf dieser Methode wird sämtlicher aktueller ActionScript-Code in der SWF-Datei des Workers abgebrochen.

Rückgabewerte
Booleantrue, wenn Code im Worker ausgeführt und unterbrochen wurde, oder false, wenn der Worker nie gestartet wurde
Ereignisdetails

workerState

Ereignis
Ereignisobjekttyp: flash.events.Event
Eigenschaft Event.type = flash.events.Event.WORKER_STATE

Sprachversion: ActionScript 3.0
Laufzeitversionen: Flash Player 11.4, AIR 3.4

Wird abgesetzt, wenn sich der Wert der state-Eigenschaft des Workers ändert.

Die Event.WORKER_STATE-Konstante definiert den Wert der type-Eigenschaft eines workerState-Ereignisobjekts.

Dieses Ereignis verfügt über die folgenden Eigenschaften:

EigenschaftWert
bubblesfalse
cancelablefalse. Es gibt kein Standardverhalten, das abgebrochen werden kann.
currentTargetDas Objekt, welches das Ereignisobjekt aktiv mit einem Ereignis-Listener verarbeitet.
targetDas Objekt, das dieses Ereignis abgesetzt hat.
WorkerExample.as

Im folgenden Beispiel wird der Einsatz eines Worker-Objekts zum Ausführen einer Aufgabe im Hintergrund demonstriert. Es zeigt auch die Kommunikation zwischen dem übergeordneten Worker und dem Hintergrundworker, wobei ein benutzerdefiniertes Objekt zwischen den Workern übergeben wird.

Dieses Beispiel besteht aus drei ActionScript-Klassen: WorkerExample ist die Hauptklasse und der übergeordnete Worker. BackgroundWorker ist die Klasse, die die Arbeit im Hintergrund übernimmt. Sie wird als Hauptklasse der SWF-Datei des Hintergrundworkers kompiliert. CountResult ist eine benutzerdefinierte Klasse, die verwendet wird, um Daten zwischen den beiden Workern als ein einzelnes Objekt anstatt mehrerer Werte zu übergeben.

In diesem Beispiel zählt der Hintergrundworker in einer Schleife bis zu einer vom übergeordneten Worker festgelegten Zahl. Dabei sendet er Nachrichten über seinen Fortschritt an den übergeordneten Worker. Wenn die Zählung fertig ist, sendet der Hintergrundworker eine Nachricht an den übergeordneten Worker, um ihm mitzuteilen, dass er fertig ist und wie lange die Zählung gedauert hat.

Die WorkerExample-Klasse ist die Hauptklasse der SWF-Datei und somit die Hauptklasse des ursprünglichen Workers. In der initialize()-Methode erstellt der Code das Hintergrundworkerobjekt unter Verwendung der Bytes aus der BackgroundWorker-Klasse, die mit einem [Embed]-Tag eingebettet werden.

Nachdem der Hintergrundworker durch Aufrufen von WorkerDomain.createWorker() erstellt wurde, richtet der Code die Kommunikation zwischen den Workern ein. Zunächst erstellt der Code einen Satz MessageChannel-Objekte. Diese werden an den Hintergrundworker übergeben, indem dessen setSharedProperty()-Methode aufgerufen wird. Zum Schluss wird ein Listener für das workerState-Ereignis des Hintergrundworkerobjekts registriert und der Worker wird durch den Aufruf seiner start()-Methode gestartet.

Während der Hintergrundworker seine Arbeit ausführt, sendet er Nachrichten über seinen Fortschritt (und schließlich das Ergebnis) an den übergeordneten Worker. Der übergeordnete Worker verwendet diese Informationen, um die Statusanzeige und den Text zu aktualisieren.

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

Diese Klasse enthält den Code für den Hintergrundworker. Diese Klasse wird in ihre eigene SWF-Datei kompiliert. Diese SWF-Datei wird dann in die SWF-Hauptdatei eingebettet.

In der initialize()-Methode empfängt sie die MessageChannel-Objekte, die der übergeordnete Worker übergeben hat. Diese werden für die Kommunikation zwischen den beiden Workern verwendet.

Der übergeordnete Worker ruft die send()-Methode für den commandChannel-Nachrichtenkanal auf, um eine Nachricht zu senden. Innerhalb des Hintergrundworkers setzt die Laufzeitumgebung dann das channelMessage-Ereignis ab, indem die handleCommandMessage()-Methode aufgerufen wird.

Die eigentliche Arbeit des Hintergrundworkers findet in der count()-Methode statt. Während der Hintergrundworker mit seiner Zählung fortfährt, sendet er Fortschrittsmeldungen an den übergeordneten Worker, indem er die send()-Methode des MessageChannel-Objekts progressChannel aufruft. Wenn die Zählung beendet ist, ruft er die send()-Methode des MessageChannel-Objekts resultChannel auf.

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

Diese Klasse definiert das CountResult-Wertobjekt. Dies ist eine benutzerdefinierte Klasse, die zwischen den beiden Workern übergeben wird. Um eine benutzerdefinierte Klasse zwischen den Workern zu übergeben, ruft jeder Worker die registerClassAlias()-Methode unter Verwendung desselben Aliasnamens auf.
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

Parallelitätunterstützung für iOS wurde von AIR Version 19 und höher hinzugefügt. Alles bleibt bei Flash/AIR Android gleich, außer Unterschiede beim Laden von SWF und das Übergeben des Byte-Arrays an den Worker.

1. Wenn das dynamische Laden einer Remote-SWF-Datei mitActionScript-Code nicht funktioniert, muss die Remote-SWF-Datei an den Worker als eine eingeschränkte SWF-Datei übergeben werden. 2. Die Einbettung von SWF-Dateien (mit ABC-Code) mit [Embed]-Tag funktioniert nicht auf iOS. Jeder weitere Worker wird aus einer separaten SWF-Datei erstellt. Um eine neue Instanz der Worker-Klasse zu erstellen, übergeben Sie ein ByteArray mit den Bytes der SWF-Datei des Hintergrundworkers als Argument an die createWorker()-Methode der WorkerDomain-Klasse.

Es gibt zwei übliche Möglichkeiten, um auf die Bytes einer SWF-Datei zu diesem Zweck auf iOS zuzugreifen: Die erste Möglichkeit verwendet Loader, um eine externe SWF-Datei zu laden, und die zweite Möglichkeit verwendet URLLoader, um die SWF-Datei zu laden.

Im folgenden Beispiel wird die Loader-API, um die SWF-Datei zu laden.

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

Wenn der Code ausgeführt wird, während die Ladefunktion von Loader aufgerufen wird, muss die Überprüfung der isPrimordial-Eigenschaft in den Hintergrund-Worker verschoben werden, wie in diesem Beispiel gezeigt.
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 ]Warum auf Englisch?
Inhalt des ActionScript 3.0-Referenzhandbuchs wird in englischer Sprache angezeigt

Nicht alle Teile des ActionScript 3.0-Referenzhandbuchs wurden in alle Sprachen übersetzt. Wenn der Text zu einem Sprachelement nicht übersetzt wurde, wird er auf Englisch angezeigt. Zum Beispiel wurden die Informationen zur ga.controls.HelpBox-Klasse nicht in andere Sprachen übersetzt. In der deutschen Version des Referenzhandbuchs erscheint der Abschnitt zur ga.controls.HelpBox-Klasse deshalb auf Englisch.