Пакет | flash.system |
Класс | public final class WorkerDomain |
Наследование | WorkerDomain Object |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.4, AIR 3.4 |
Примечание. Использование объектов worker для параллельного выполнения поддерживается во Flash Player и в AIR на настольных платформах. Для мобильных платформ параллельное выполнение поддерживается в AIR для Android, но не в AIR для iOS. Прежде чем использовать многозадачность, вы можете проверить наличие поддержки многозадачности с помощью статического свойства isSupported.
Экземпляры WorkerDomain нельзя создавать напрямую путем вызова конструктора WorkerDomain()
. Для каждого приложения существует один экземпляр WorkerDomain. В контекстах, поддерживающих использование объектов Worker для параллельного выполнения задач, среда выполнения автоматически создает объект WorkerDomain при запуске. Доступ к этому экземпляру осуществляется посредством статического свойства current
.
Для создания нового экземпляра класса Worker, используйте метод createWorker()
. Для доступа к набору объектов Worker, выполняющихся в данный момент используйте метод listWorkers()
.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
current : WorkerDomain [статические] [только для чтения]
Экземпляр WorkerDomain, в котором в настоящий момент выполняется код. | WorkerDomain | ||
isSupported : Boolean [статические] [только для чтения]
Указывает, поддерживает ли текущий контекст выполнения объекты WorkerDomain и Worker для организации параллельного выполнения кода. | WorkerDomain |
Метод | Определено | ||
---|---|---|---|
Создает новый экземпляр Worker из байтовых данных или swf-файла. | WorkerDomain | ||
Показывает, определено ли заданное свойство для объекта. | Object | ||
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | ||
Предоставляет доступ к набору текущих выполняющихся объектов Worker в домене WorkerDomain (т. е. таких объектов Worker, у которых свойство state имеет значение WorkerState.RUNNING). | WorkerDomain | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object |
current | свойство |
current:WorkerDomain
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.4, AIR 3.4 |
Экземпляр WorkerDomain, в котором в настоящий момент выполняется код. Это единственный экземпляр WorkerDomain в приложении.
Реализация
public static function get current():WorkerDomain
isSupported | свойство |
isSupported:Boolean
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.4, AIR 3.4 |
Указывает, поддерживает ли текущий контекст выполнения объекты WorkerDomain и Worker для организации параллельного выполнения кода.
Если параллельное выполнение доступно, это свойство имеет значение true
.
Реализация
public static function get isSupported():Boolean
createWorker | () | метод |
public function createWorker(swf:ByteArray, giveAppPrivileges:Boolean = false):Worker
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.4, AIR 3.4 |
Создает новый экземпляр Worker
из байтового содержимого swf.
Каждый объект worker создается из изолированного приложения SWF и выполняется как изолированное приложение SWF. Для создания экземпляра Worker необходимо получить байтовое содержимое SWF-файла в виде экземпляра ByteArray и передать его в данный метод. Существует три способа получить доступ к байтовому содержимому SWF-файла для этой цели:
Использовать метатег [Embed] для внедрения SWF-файла в приложение в виде байтового массива (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(); }
Загрузить внешний SWF-файл с помощью загрузчика 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(); }
Использовать один SWF-файл и как первоначальный, и как фоновый объект worker:
// 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 с помощью метода createWorker()
не инициирует его выполнение. Чтобы запустить код объекта Worker на выполнение, вызовите метод start()
этого объекта Worker.
Полезный эффект объектов Worker состоит в том, что они снижают вероятность пропуска кадров вследствие блокирования основного потока отрисовки другим кодом. Тем не менее, для объектов Worker требуется дополнительная системная память и ресурсы центрального процессора, что может влиять на итоговую производительность. Поскольку каждый объект Worker использует отдельный экземпляр виртуальной среды исполнения, накладные расходы могут быть велики даже для элементарных объектов worker. При использовании объектов Worker проверяйте работу кода на всех целевых платформах, чтобы убедиться, что нагрузка на систему является приемлемой. Adobe рекомендует не использовать в типовых сценариях более одного или двух фоновых объектов Worker.
Параметры
swf:ByteArray — Объект ByteArray, содержащий байты действительного SWF-файла
| |
giveAppPrivileges:Boolean (default = false ) — указывает, следует ли предоставить объекту worker права «песочницы» в AIR. Этот параметр игнорируется во Flash Player
|
Worker — вновь созданный объект Worker, если создание завершилось успешно. Возвращаемое значение null указывает на то, что объект worker не был создан из-за того, что текущий контекст не поддерживает параллельное выполнение, или из-за того, что достигнут предел возможностей платформы.
|
Выдает
SecurityError — swf-файл, байтовое содержимое которого передается в параметре swf , принадлежит другому домену безопасности, чем swf, в котором вызывается данный метод
|
listWorkers | () | метод |
public function listWorkers():Vector.<Worker>
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 11.4, AIR 3.4 |
Предоставляет доступ к набору текущих выполняющихся объектов Worker в домене WorkerDomain (т. е. таких объектов Worker, у которых свойство state
имеет значение WorkerState.RUNNING
).
Vector.<Worker> — Вектор (Vector), содержащий экземпляры Worker, выполняющиеся в данный момент.
|
Tue Jun 12 2018, 11:34 AM Z