diff --git a/entry/src/main/ets/entryability/EntryAbility.ets b/entry/src/main/ets/entryability/EntryAbility.ets index 85b513a397ee37166ca94ccc7937cd2c4f621abb..c2bea47077a175c3b73e31a24db729b693db1ea2 100644 --- a/entry/src/main/ets/entryability/EntryAbility.ets +++ b/entry/src/main/ets/entryability/EntryAbility.ets @@ -24,7 +24,7 @@ export default class EntryAbility extends UIAbility { } onDestroy() { - WorkerManager.terminalSelf(); + WorkerManager.getInstance().terminalSelf(); hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy'); } diff --git a/entry/src/main/ets/view/AdjustContentView.ets b/entry/src/main/ets/view/AdjustContentView.ets index 868c4c5d4edafc19df3de4b503e08028927cba48..d84c3e5485baf8966adb9bc038c6b9ecbe6c5ca8 100644 --- a/entry/src/main/ets/view/AdjustContentView.ets +++ b/entry/src/main/ets/view/AdjustContentView.ets @@ -102,11 +102,11 @@ struct SliderCustom { }); aboutToAppear(): void { - WorkerManager.onMessage((event: MessageEvents) => { + WorkerManager.getInstance().onMessage((event: MessageEvents) => { this.updatePixelMap(event); }) - WorkerManager.onExit(); - WorkerManager.onMessageError(); + WorkerManager.getInstance().onExit(); + WorkerManager.getInstance().onMessageError(); } build() { @@ -170,7 +170,7 @@ struct SliderCustom { this.pixelMap.readPixelsToBuffer(bufferArray) .then(() => { let message = new MessageItem(bufferArray, sliderValue, value, type); - WorkerManager.postMessage(message); + WorkerManager.getInstance().postMessage(message); if (this.postState) { this.deviceListDialogController.open(); } diff --git a/entry/src/main/ets/workers/WorkerManager.ets b/entry/src/main/ets/workers/WorkerManager.ets index 1a9ba37fa61c0a325ed81cc41511dd9017ce093b..48cb7fe9532d8363b32d98973d55ba36ee8c07ba 100644 --- a/entry/src/main/ets/workers/WorkerManager.ets +++ b/entry/src/main/ets/workers/WorkerManager.ets @@ -22,46 +22,57 @@ import { MessageItem } from "../viewModel/MessageItem"; * Main thread worker */ export class WorkerManager { - private static instance: worker.ThreadWorker | undefined = undefined; + private static instance: WorkerManager | undefined = undefined; + private static workerThread: worker.ThreadWorker | undefined = undefined; private constructor() { } - public static getInstance(): worker.ThreadWorker { + public static getInstance(): WorkerManager { if (!WorkerManager.instance) { - WorkerManager.instance = new worker.ThreadWorker(CommonConstants.WORKER_FILE); + WorkerManager.instance = new WorkerManager(); + WorkerManager.workerThread = new worker.ThreadWorker(CommonConstants.WORKER_FILE); } return WorkerManager.instance; } - public static postMessage(message: MessageItem): void { + public postMessage(message: MessageItem): void { try { - WorkerManager.getInstance().postMessage(message); + WorkerManager.workerThread?.postMessage(message); } catch (error) { hilog.error(0x0000, 'WorkerManager', 'Failed to possMessage', `on message error ${JSON.stringify(error)}`); } } - public static onExit(): void { - WorkerManager.getInstance().onexit = () => { + public onExit(): void { + if (!WorkerManager.workerThread) { + return; + } + WorkerManager.workerThread.onexit = () => { hilog.info(0x0000, 'WorkerManager', 'worker exit. Cause: %{public}s'); } } - public static onMessageError(): void { - WorkerManager.getInstance().onmessageerror = (event: MessageEvents) => { + public onMessageError(): void { + if (!WorkerManager.workerThread) { + return; + } + WorkerManager.workerThread.onmessageerror = (event: MessageEvents) => { hilog.error(0x0000, 'WorkerManager', 'Main thread post message error. Cause: %{public}s', `on worker error ${JSON.stringify(event)}`); } } - public static onMessage(callback: (event: MessageEvents) => void): void { - WorkerManager.getInstance().onmessage = callback; + public onMessage(callback: (event: MessageEvents) => void): void { + if (!WorkerManager.workerThread) { + return; + } + WorkerManager.workerThread.onmessage = callback; } - public static terminalSelf(): void { + public terminalSelf(): void { try { - WorkerManager.getInstance().terminate(); + WorkerManager.workerThread?.terminate(); hilog.info(0x0000, 'WorkerManager', 'worker terminal success'); } catch (error) { hilog.error(0x0000, 'WorkerManager', 'Failed to terminalSelf. Cause: %{public}s',