HarmonyOS 鸿蒙Next:HAR module下的Worker.ts能否在entry中依靠worker.ThreadWorker启动?

发布于 1周前 作者 ionicwang 来自 鸿蒙OS

HarmonyOS 鸿蒙Next:HAR module下的Worker.ts能否在entry中依靠worker.ThreadWorker启动?

1. 普通的js package移植成HarmonyOS的HAR module,其中在src/main/ets/workers/Worker.ets中定义了workerPort,并定义了其onmessage, onmessageerror和onerror

cke_5114.jpeg

const workerPort: ThreadWorkerGlobalScope = worker.workerPort;

workerPort.onmessage = (e: MessageEvents):void => {

    console.log(“port message”, e)

    workerPort.postMessage(“portMessage”)

}

2. 上述module编译无错,output中生成har文件

3. entry中引入oh-package.json5中引入上输入HAR

4. 在entry的index.ets中

let workerInstance = new worker.ThreadWorker(’@library/ets/workers/Worker.ets’);

workerInstance.onmessage = () => {

    console.info(‘main thread onmessage’);
};

workerInstance.postMessage(‘hello world’);

在上述代码调试中,没有显性错误,但是Worker.ets中定义的onmessage无任何输出。

现在怀疑HAR中的worker根本就没有启动

2 回复

在HAR module下的Worker.ts能够在entry中依靠worker.ThreadWorker启动

在HarmonyOS鸿蒙Next的开发框架中,关于HAR module下的Worker.ts是否能在entry中依靠worker.ThreadWorker启动的问题,答案是可以的,但需要注意几个关键点。

worker.ThreadWorker是HarmonyOS提供的一种多线程处理能力,允许开发者在后台执行耗时任务,从而避免阻塞主线程。在HAR模块中,如果你的Worker.ts文件定义了一个Worker类,并且这个类继承自系统提供的Worker基类,那么你可以在entry中通过worker.ThreadWorker来启动这个Worker。

启动过程通常涉及创建ThreadWorker实例,并通过该实例的postMessage方法发送消息给Worker,同时设置onmessage事件监听器来处理Worker返回的结果。

需要注意的是,Worker的运行环境是独立的,它有自己的内存空间和全局对象,不能直接访问主线程的全局变量和DOM对象。因此,在Worker中处理的数据和主线程之间的通信需要通过消息传递来实现。

如果在实际开发中遇到启动失败或其他问题,请检查Worker类的定义是否正确,以及消息传递机制是否实现无误。如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部