套件 | flash.system |
類別 | public final class WorkerDomain |
繼承 | WorkerDomain Object |
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
注意:桌面平台的 Flash Player 和 AIR 支援將 Worker 做為並行之用。對於行動平台,Android 上的 AIR 支援並行,但 iOS 上的 AIR 則否。您可以在嘗試使用之前,先使用靜態 isSupported 屬性來確認是否支援並行。
您無法透過呼叫 WorkerDomain()
建構函式,直接建立 WorkerDomain 實體。應用程式會有一個 WorkerDomain 實體。在支援將 Worker 做為並行之用的內容中,執行階段會自動在啟動時建立 WorkerDomain。您可以使用靜態 current
屬性來存取該實體。
若要建立 Worker 類別的新實體,請使用 createWorker()
方法。若要存取目前正在執行的 Worker 物件集,請使用 listWorkers()
方法。
相關 API 元素
屬性 | 定義自 | ||
---|---|---|---|
constructor : Object
類別物件的參照或是特定物件實體的建構函數。 | Object | ||
current : WorkerDomain [靜態] [唯讀]
程式碼目前執行所在的 WorkerDomain 實體。 | WorkerDomain | ||
isSupported : Boolean [靜態] [唯讀]
指出目前的執行階段內容是否支援 WorkerDomain 和 Worker 物件以便同時執行程式碼。 | WorkerDomain |
方法 | 定義自 | ||
---|---|---|---|
從 SWF 的位元組建立新的 Worker 實體。 | WorkerDomain | ||
指出物件是否有已定義的指定屬性。 | Object | ||
指出 Object 類別的實體是否位於指定為參數的物件原型鏈中。 | Object | ||
提供存取 WorkerDomain 中目前正在執行的 Worker 集 (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 | 屬性 |
createWorker | () | 方法 |
public function createWorker(swf:ByteArray, giveAppPrivileges:Boolean = false):Worker
語言版本: | ActionScript 3.0 |
執行階段版本: | Flash Player 11.4, AIR 3.4 |
從 SWF 的位元組建立新的 Worker
實體。
每個 Worker 的建立和執行方式都是透過隔離的 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(); }
使用 URLLoader 載入外部 SWF 檔案:
// 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 和背景 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 }
使用 createWorker()
建立 Worker 物件並不會開始執行 Worker。若要開始執行 Worker 的程式碼,請呼叫 Worker 物件的 start()
方法。
Worker 很實用,因為它降低了影格速率因主要顯示執行緒遭到其他程式碼封鎖而丟棄的可能性。不過,Worker 需要額外的系統記憶體和 CPU 使用量,這會讓整體應用程式效能付出不少代價。由於每個 Worker 都會使用專屬的執行階段虛擬機器實體,因此,即使是簡單的 Worker,工作負荷也會很大。在使用 Worker 時,請在所有目標平台間測試您的程式碼,以確保系統上的需求不會太大。Adobe 建議在一般情況下,不要使用超過一個或兩個背景 Worker。
參數
swf:ByteArray — 包含有效 SWF 之位元組的 ByteArray
| |
giveAppPrivileges:Boolean (default = false ) — 表示是否應將 AIR 中的應用程式安全執行程序權限授與 Worker。在 Flash Player 中會忽略這個參數
|
Worker — 新建立的 Worker (如果建立成功)。傳回值 null 表示無法建立 Worker,可能是因為目前的內容不支援並行,或是建立新 Worker 可能會超過實作限制。
|
擲回值
SecurityError — 位元組傳遞至 swf 參數的 SWF 來自於與在其中呼叫這個方法的 SWF 不同的安全性網域
|
listWorkers | () | 方法 |
Tue Jun 12 2018, 03:47 PM Z