鸿蒙原生应用/元服务开发-延迟任务开发实现(二)

一、接口说明

接口名 接口描述
startWork(work: WorkInfo): void; 申请延迟任务
stopWork(work: WorkInfo, needCancel?: boolean): void; 取消延迟任务
getWorkStatus(workId: number, callback: AsyncCallback>): void; 获取延迟任务状态(Callback形式)
getWorkStatus(workId: number): Promise; 获取延迟任务状态(Promise形式)
obtainAllWorks(callback: AsyncCallback>): void; 获取所有延迟任务(Callback形式)
obtainAllWorks(): Promise>; 获取所有延迟任务(Promise形式)
stopAndClearWorks(): void; 停止并清除任务
isLastWorkTimeOut(workId: number, AsyncCallback): void; 获取上次任务是否超时(针对RepeatWork,Callback形式)
isLastWorkTimeOut(workId: number): Promise; 获取上次任务是否超时(针对RepeatWork,Promise形式)

表2 延迟任务主要接口

以下是延迟任务开发使用的相关接口,更多接口及使用方式请见延迟任务文档。

表3 WorkInfo参数

名称 类型 必填 说明
workId number 延迟任务ID。
bundleName string 延迟任务包名。
abilityName string 延迟任务回调通知的组件名。
networkType NetworkType 网络类型。
isCharging boolean 是否充电。- true表示充电触发延迟回调,false表示不充电触发延迟回调。
chargerType ChargingType 充电类型。
batteryLevel number 电量。
batteryStatus BatteryStatus 电池状态。
storageRequest StorageRequest 存储状态。
isRepeat boolean 是否循环任务。- true表示循环任务,false表示非循环任务。
repeatCycleTime number 循环间隔,单位为毫秒。
repeatCount number 循环次数。
isPersisted boolean 是否持久化保存工作。- true表示持久化保存工作。false表示非持久化保存工作。
isDeepIdle boolean 是否要求设备进入空闲状态。- true表示需要,false表示不需要。
idleWaitTime number 空闲等待时间,单位为毫秒。
parameters [key: string]: number string boolean

WorkInfo参数用于设置应用条件,参数设置时需遵循以下规则:

workId、bundleName、abilityName为必填项,bundleName需为本应用包名。

携带参数信息仅支持number、string、boolean三种类型。

至少设置一个满足的条件,包括网络类型、充电类型、存储状态、电池状态、定时状态等。

对于重复任务,任务执行间隔至少20分钟。设置重复任务时间间隔时,须同时设置是否循环或循环次数中的一个。

表4 延迟任务回调接口

以下是延迟任务回调开发使用的相关接口。

接口名 接口描述
onWorkStart(work: workScheduler.WorkInfo): void 延迟调度任务开始的回调
onWorkStop(work: workScheduler.WorkInfo): void 延迟调度任务结束的回调

二、开发步骤

延迟任务调度开发步骤分为两步:实现延迟任务调度扩展能力、实现延迟任务调度。

1.延迟任务调度扩展能力:实现WorkSchedulerExtensionAbility开始和结束的回调接口。

2.延迟任务调度:调用延迟任务接口,实现延迟任务申请、取消等功能。

实现延迟任务回调拓展能力

1.新建工程目录。

在工程entry Module对应的ets目录(./entry/src/main/ets)下,新建目录及ArkTS文件,例如新建一个目录并命名为extension。在extension目录下,新建一个ArkTS文件并命名为WorkSchedulerExtension.ets,用以实现延迟任务回调接口。

2.导入模块。

import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility';
import workScheduler from '@ohos.resourceschedule.workScheduler';复制

3.实现WorkSchedulerExtension生命周期接口。

export default class MyWorkSchedulerExtensionAbility extends WorkSchedulerExtensionAbility {
  // 延迟任务开始回调
  onWorkStart(workInfo: workScheduler.WorkInfo) {
    console.info(`onWorkStart, workInfo = ${JSON.stringify(workInfo)}`);
  }

  // 延迟任务结束回调
  onWorkStop(workInfo: workScheduler.WorkInfo) {
    console.info(`onWorkStop, workInfo is ${JSON.stringify(workInfo)}`);
  }
}

4.在module.json5配置文件中注册WorkSchedulerExtensionAbility,并设置如下标签:

type标签设置为“workScheduler”。

srcEntry标签设置为当前ExtensionAbility组件所对应的代码路径。

{
  "module": {
      "extensionAbilities": [
        {
          "name": "MyWorkSchedulerExtensionAbility",
          "srcEntry": "./ets/WorkSchedulerExtension/WorkSchedulerExtension.ets",
          "label": "$string:WorkSchedulerExtensionAbility_label",
          "description": "$string:WorkSchedulerExtensionAbility_desc",
          "type": "workScheduler"
        }
      ]
  }
}

实现延迟任务调度

1.导入模块。

import workScheduler from '@ohos.resourceschedule.workScheduler';
import { BusinessError } from '@ohos.base';复制

2.申请延迟任务。

// 创建workinfo
const workInfo: workScheduler.WorkInfo = {
  workId: 1,
  networkType: workScheduler.NetworkType.NETWORK_TYPE_WIFI,
  bundleName: 'com.example.application',
  abilityName: 'MyWorkSchedulerExtensionAbility'
}

try {
  workScheduler.startWork(workInfo);
  console.info(`startWork success`);
} catch (error) {
  console.error(`startWork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
}

3.取消延迟任务。

// 创建workinfo
const workInfo: workScheduler.WorkInfo = {
  workId: 1,
  networkType: workScheduler.NetworkType.NETWORK_TYPE_WIFI,
  bundleName: 'com.example.application', 
  abilityName: 'MyWorkSchedulerExtensionAbility' 
}

try {
  workScheduler.stopWork(workInfo);
  console.info(`stopWork success`);
} catch (error) {
  console.error(`stopWork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`);
}

本文根据HarmonyOS官方开发文档学习整理

相关推荐

  1. 鸿蒙原生应用服务开发-Web管理位置权限

    2024-01-19 01:02:02       33 阅读
  2. 鸿蒙原生应用服务开发-Web上传文件

    2024-01-19 01:02:02       32 阅读
  3. 鸿蒙应用/服务开发-窗口概述

    2024-01-19 01:02:02       55 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-19 01:02:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-19 01:02:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-01-19 01:02:02       82 阅读
  4. Python语言-面向对象

    2024-01-19 01:02:02       91 阅读

热门阅读

  1. Vue前端规范【一】

    2024-01-19 01:02:02       50 阅读
  2. MYSQL 1

    MYSQL 1

    2024-01-19 01:02:02      59 阅读
  3. Django——django与环境搭建

    2024-01-19 01:02:02       52 阅读
  4. CDH6.3.2,不互通的cdh平台互导hive数据

    2024-01-19 01:02:02       50 阅读
  5. 【PyTorch简介】4.Building the model layers 生成模型层

    2024-01-19 01:02:02       44 阅读
  6. 学习记录1.10

    2024-01-19 01:02:02       55 阅读
  7. SQL笔记 -- 索引失效情况

    2024-01-19 01:02:02       56 阅读
  8. go语言的部分的

    2024-01-19 01:02:02       52 阅读
  9. HBase学习三:集群部署

    2024-01-19 01:02:02       56 阅读
  10. 【数据结构和算法】种花问题

    2024-01-19 01:02:02       55 阅读
  11. web块级如何居中,关于css/html居中问题

    2024-01-19 01:02:02       57 阅读
  12. 微信小程序有几个文件

    2024-01-19 01:02:02       61 阅读