openharmony 鸿蒙 long-time-task-guide

2025-06-12 浏览 (1)

长时任务开发指导(TaskPool)

此处提供使用TaskPool进行长时任务的开发指导,以定期采集传感器数据为例。

使用TaskPool进行传感器数据监听

  1. 导入需要用到的模块。

    // Index.ets
    import { sensor } from '@kit.SensorServiceKit';
    import { taskpool } from '@kit.ArkTS';
    import { BusinessError, emitter } from '@kit.BasicServicesKit';
    
  2. 定义长时任务,内部监听sensor数据,并通过emitter注册销毁通知。

    // Index.ets
    @Concurrent
    async function SensorListener() : Promise<void> {
      sensor.on(sensor.SensorId.ACCELEROMETER, (data) => {
        emitter.emit({ eventId: 0 }, { data: data });
      }, { interval: 1000000000 });
    
      emitter.on({ eventId: 1 }, () => {
        sensor.off(sensor.SensorId.ACCELEROMETER)
        emitter.off(1)
      })
    }
    
  3. 宿主线程定义注册及销毁的行为。

    • 注册:发起长时任务,并通过emitter接收监听数据。
    • 销毁:发送取消传感器监听的事件,并结束长时任务。
    // Index.ets
    @Entry
    @Component
    struct Index {
      sensorTask?: taskpool.LongTask
    
      build() {
        Column() {
          Text("Add listener")
            .id('HelloWorld')
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(() => {
              this.sensorTask = new taskpool.LongTask(SensorListener);
              emitter.on({ eventId: 0 }, (data) => {
                // Do something here
                console.info(`Receive ACCELEROMETER data: {${data.data?.x}, ${data.data?.y}, ${data.data?.z}`);
              });
              taskpool.execute(this.sensorTask).then(() => {
                console.info("Add listener of ACCELEROMETER success");
              }).catch((e: BusinessError) => {
                // Process error
              })
            })
          Text("Delete listener")
            .id('HelloWorld')
            .fontSize(50)
            .fontWeight(FontWeight.Bold)
            .onClick(() => {
              emitter.emit({ eventId: 1 });
              emitter.off(0);
              if(this.sensorTask != undefined) {
                taskpool.terminateTask(this.sensorTask);
              } else {
                console.error("sensorTask is undefined.");
              }
            })
        }
        .height('100%')
        .width('100%')
      }
    }
    

你可能感兴趣的鸿蒙文章

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

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

harmony 鸿蒙异步锁

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

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

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

harmony 鸿蒙方舟字节码概述

harmony 鸿蒙共享容器

harmony 鸿蒙异步等待

harmony 鸿蒙ArkTS跨语言交互

  • 所属分类: 后端技术
  • 本文标签: 鸿蒙 软件
  • 版权声明: 本文链接 https://seaxiang.com/blog/B817Xl