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

这篇具有很好参考价值的文章主要介绍了鸿蒙原生应用/元服务开发-延迟任务开发实现(二)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、接口说明

接口名 接口描述
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官方开发文档学习整理文章来源地址https://www.toymoban.com/news/detail-802245.html

到了这里,关于鸿蒙原生应用/元服务开发-延迟任务开发实现(二)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • HarmonyOS鸿蒙原生应用开发设计- 隐私声明

    HarmonyOS设计文档中,为大家提供了独特的隐私声明,开发者可以根据需要直接引用。 开发者直接使用官方提供的隐私声明内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的内容产生的侵权意外情况等,减少自主创作隐私声明的工作量。当然,如果

    2024年02月05日
    浏览(62)
  • HarmonyOS鸿蒙原生应用开发设计- 流转图标

    HarmonyOS设计文档中,为大家提供了独特的流转图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的流转图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的图标侵权意外情况等,减少自主创作流转图标的工作量。当然,如果有个性

    2024年02月07日
    浏览(61)
  • HarmonyOS鸿蒙原生应用开发设计- 华为分享图标

    HarmonyOS设计文档中,为大家提供了独特的华为分享图标,开发者可以根据需要直接引用。 开发者直接使用官方提供的华为分享图标内容,既可以符合HarmonyOS原生应用的开发上架运营规范,又可以防止使用别人的内容产生的侵权意外情况等,减少自主创作华为分享图标的工作量

    2024年02月08日
    浏览(62)
  • HarmonyOS SDK,助力开发者打造焕然一新的鸿蒙原生应用

    鸿蒙生态 千帆启航仪式于 1 月1 8 日正式启动。 从2019年 HarmonyOS 正式发布到2 020 年“没有人能够熄灭漫天星光”,今天,满天星光终汇成璀璨星河, HarmonyOS NEXT鸿蒙 星河版 重磅发布,带来了全新架构、全新体验、全新生态。 作为支撑鸿蒙原生应用开发的技术源动力,Harmon

    2024年01月20日
    浏览(90)
  • 鸿蒙原生应用/元服务开发-代理提醒开发步骤(二)

    1.申请ohos.permission.PUBLISH_AGENT_REMINDER权限。 2.使能通知开关。获得用户授权后,才能使用代理提醒功能。 3.导入模块。 4.定义目标提醒代理。开发者根据实际需要,选择定义如下类型的提醒。 定义倒计时实例。 定义日历实例。 定义闹钟实例。 5.发布相应的提醒代理。代理发布

    2024年01月16日
    浏览(54)
  • 基于鸿蒙HarmonyOS 元服务开发一款公司运营应用(ArkTS API 9)

    最近基于Harmony OS最新版本开发了一个作品,本文来详细讲解一下,如何我是如何开发这个作品的。以及如何使用OpenHarmony,基于ArkTS,API 9来开发一个属于自己的元服务。 废话不多说,我的作品名称叫做 Company Operate 公司运营,是一个根据会计公式来预测公司未来几个月的资产

    2024年02月01日
    浏览(64)
  • 鸿蒙原生应用开发-折叠屏、平板设备服务卡片适配

    为不同尺寸的卡片提供不同的功能 在卡片开发过程中请考虑适配不同尺寸的设备,特别是在折叠屏和平板设备上,设备屏幕尺寸的变化直接影响了卡片内容的展示。请发挥想象力设计具有自适应能力的卡片,避免在卡片内容不做任何处理的情况下直接适配成较大尺寸,原则上

    2024年02月03日
    浏览(47)
  • 鸿蒙HarmonyOS应用开发之使用Node-API实现跨语言交互开发流程

    使用Node-API实现跨语言交互,首先需要按照Node-API的机制实现模块的注册和加载等相关动作。 ArkTS/JS侧 :实现C++方法的调用。代码比较简单,import一个对应的so库后,即可调用C++方法。 Native侧 :.cpp文件,实现模块的注册。需要提供注册lib库的名称,并在注册回调方法中定义接

    2024年04月26日
    浏览(46)
  • HarmonyOS/OpenHarmony原生应用开发-华为Serverless云端服务支持说明(一)

    云端服务的实现是 HarmonyOS/OpenHarmony原生应用开发的一个重要的环节,如果用户端是鸿蒙原生应用,但是服务端即云端还是基于传统的各种WEB网络框架、数据库与云服务器,那么所谓的原生应用开发实现的数据即后端服务是和以前、现在的互联网、移动互联网应用是一样的,等

    2024年02月07日
    浏览(57)
  • 鸿蒙应用项目分享:我的鸿蒙毕设:基于HarmonyOS的任务看板平台【一】:项目整体介绍

    HELLO,EVERYONE: 这里分享我自己的毕业设计,除软件内使用的个别图标以外,部分界面参考出处和图标出处会在文末标出,再次声明:本文全部内容仅为学习使用。 【本文先分享内容界面的样子,后续再考虑分享代码的形式,视频教程OR图文OR都要】 这是主要的哈,比如一些

    2023年04月25日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包