harmony 鸿蒙长时任务开发指导(TaskPool)
长时任务开发指导(TaskPool)
此处提供使用TaskPool进行长时任务的开发指导,以定期采集传感器数据为例。
使用TaskPool进行传感器数据监听
- 导入需要用到的模块。
// Index.ets
import { sensor } from '@kit.SensorServiceKit';
import { taskpool } from '@kit.ArkTS';
import { BusinessError, emitter } from '@kit.BasicServicesKit';
- 定义长时任务,内部监听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)
})
}
- 宿主线程定义注册及销毁的行为。
- 注册:发起长时任务,并通过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%')
}
}
你可能感兴趣的鸿蒙文章
0
赞
- 所属分类: 后端技术
- 本文标签:
热门推荐
-
2、 - 优质文章
-
3、 gate.io
-
8、 golang
-
9、 openharmony
-
10、 Vue中input框自动聚焦