harmony 鸿蒙常驻任务开发指导(Worker)

  • 2025-06-12
  • 浏览 (4)

常驻任务开发指导(Worker)

提供使用Worker进行常驻任务的开发指导。Worker将持续执行任务,直到宿主线程发送终止指令。

开发过程和示例如下:

  1. DevEco Studio支持一键生成Worker,在对应的{moduleName}目录下任意位置,点击鼠标右键 > New > Worker,即可自动生成Worker的模板文件及配置信息。本文以创建“Worker”为例。

此外,还支持手动创建Worker文件,具体方式和相关注意事项请参见创建Worker的注意事项

  1. 导入Worker模块。
   // Index.ets
   import { worker } from '@kit.ArkTS';
  1. 在宿主线程中通过调用ThreadWorker的constructor()方法创建Worker对象,当前线程为宿主线程。
   // Index.ets
   const workerInstance: worker.ThreadWorker = new worker.ThreadWorker('entry/ets/workers/Worker.ets');
  1. 此处的宿主线程为UI主线程,宿主线程发送’start’以开始执行某个长期运行的任务,并接收子线程返回的相关消息。当不需要执行该任务时,发送’stop’以停止该任务的执行。在此示例中,任务将在10秒后结束。
   // Index.ets
   
   @Entry
   @Component
   struct Index {
     build() {
       Column() {
         Text("Listener task")
           .id('HelloWorld')
           .fontSize(50)
           .fontWeight(FontWeight.Bold)
           .onClick(() => {
             workerInstance.postMessage({type: 'start'})
             workerInstance.onmessage = (event) => {
               console.info('UI主线程收到消息:', event.data);
             }
             // 10秒后停止worker
             setTimeout(() => {
               workerInstance.postMessage({ type: 'stop' });
             }, 10000);
           })
       }
       .height('100%')
       .width('100%')
     }
   }

  1. 在Worker线程中,当接收到宿主线程发送的消息为’start’时,开始执行某个长时间不定期运行的任务,并实时向宿主线程返回消息。当接收到的消息为’stop’时,结束该任务的执行并返回相应的消息给宿主线程。
   // Worker.ets
   import { ErrorEvent, MessageEvents, ThreadWorkerGlobalScope, worker } from '@kit.ArkTS';
   const workerPort: ThreadWorkerGlobalScope = worker.workerPort;
   let isRunning = false;
   workerPort.onmessage = (e: MessageEvents) => {
     const type = e.data.type as string;
     if (type === 'start') {
       if (!isRunning) {
         isRunning = true;
         // 开始常驻任务
         performTask();
       }
     } else if (type === 'stop') {
       isRunning = false;
       workerPort.close();  // 关闭Worker
     }
   }
   // 模拟常驻任务
   function performTask() {
     if (isRunning) {
       // 模拟某个长期运行的任务
       workerPort.postMessage('Worker is performing a task');
       // 1秒后再次执行任务
       setTimeout(performTask, 1000);
     }
     workerPort.postMessage('Worker is stop performing a task');
   }

你可能感兴趣的鸿蒙文章

harmony 鸿蒙ArkTS(方舟编程语言)

harmony 鸿蒙在build-profile.json5中配置arkOptions

harmony 鸿蒙异步锁

harmony 鸿蒙方舟字节码文件格式

harmony 鸿蒙方舟字节码函数命名规则

harmony 鸿蒙方舟字节码基本原理

harmony 鸿蒙方舟字节码概述

harmony 鸿蒙共享容器

harmony 鸿蒙异步等待

harmony 鸿蒙ArkTS跨语言交互

0  赞