1# @ohos.resourceschedule.workScheduler (延迟任务调度) 2 3本模块提供延迟任务注册、取消、查询的能力。在开发过程中,对于实时性要求不高的任务,可以调用本模块接口注册延迟任务,在系统空闲时根据性能、功耗、热等情况进行调度执行。 4 5> **说明:** 6> 7> 本模块首批接口从API version 9开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 8> 9> 本模块接口仅可在Stage模型下使用。 10 11## 导入模块 12 13```ts 14import workScheduler from '@ohos.resourceschedule.workScheduler'; 15``` 16 17## workScheduler.startWork 18 19startWork(work: WorkInfo): void 20 21申请延迟任务。 22 23**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 24 25**参数**: 26 27| 参数名 | 类型 | 必填 | 说明 | 28| ---- | --------------------- | ---- | -------------- | 29| work | [WorkInfo](#workinfo) | 是 | 要添加到执行队列的延迟任务。 | 30 31**错误码**: 32 33以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 34 35| 错误码ID | 错误信息 | 36| ---- | --------------------- | 37| 9700001 | Memory operation failed. | 38| 9700002 | Parcel operation failed. | 39| 9700003 | System service operation failed. | 40| 9700004 | Check workInfo failed. | 41| 9700005 | StartWork failed. | 42 43**示例**: 44 45```ts 46 import { BusinessError } from '@ohos.base'; 47 48 let workInfo: workScheduler.WorkInfo = { 49 workId: 1, 50 batteryStatus:workScheduler.BatteryStatus.BATTERY_STATUS_LOW, 51 isRepeat: false, 52 isPersisted: true, 53 bundleName: "com.example.myapplication", 54 abilityName: "MyExtension", 55 parameters: { 56 mykey0: 1, 57 mykey1: "string value", 58 mykey2: true, 59 mykey3: 1.5 60 } 61 } 62 try{ 63 workScheduler.startWork(workInfo); 64 console.info('workschedulerLog startWork success'); 65 } catch (error) { 66 console.error(`workschedulerLog startwork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 67 } 68``` 69 70## workScheduler.stopWork 71 72stopWork(work: WorkInfo, needCancel?: boolean): void 73 74取消延迟任务。 75 76**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 77 78**参数**: 79 80| 参数名 | 类型 | 必填 | 说明 | 81| ---------- | --------------------- | ---- | ---------- | 82| work | [WorkInfo](#workinfo) | 是 | 要停止或移除的延迟任务。 | 83| needCancel | boolean | 否 | 是否需要移除的任务。<br>- true表示停止并移除,false表示只停止不移除。默认为false。| 84 85**错误码**: 86 87以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 88 89| 错误码ID | 错误信息 | 90| ---- | --------------------- | 91| 9700001 | Memory operation failed. | 92| 9700002 | Parcel operation failed. | 93| 9700003 | System service operation failed. | 94| 9700004 | Check workInfo failed. | 95 96**示例**: 97 98```ts 99 import { BusinessError } from '@ohos.base'; 100 101 let workInfo: workScheduler.WorkInfo = { 102 workId: 1, 103 batteryStatus:workScheduler.BatteryStatus.BATTERY_STATUS_LOW, 104 isRepeat: false, 105 isPersisted: true, 106 bundleName: "com.example.myapplication", 107 abilityName: "MyExtension", 108 parameters: { 109 mykey0: 1, 110 mykey1: "string value", 111 mykey2: true, 112 mykey3: 1.5 113 } 114 } 115 try{ 116 workScheduler.stopWork(workInfo, false); 117 console.info('workschedulerLog stopWork success'); 118 } catch (error) { 119 console.error(`workschedulerLog stopWork failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 120 } 121``` 122 123## workScheduler.getWorkStatus 124 125getWorkStatus(workId: number, callback : AsyncCallback\<WorkInfo>): void 126 127通过workId获取延迟任务,使用Callback异步回调。 128 129**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 130 131**参数**: 132 133| 参数名 | 类型 | 必填 | 说明 | 134| -------- | ------------------------------------- | ---- | ---------------------------------------- | 135| workId | number | 是 | 延迟任务Id。 | 136| callback | AsyncCallback\<[WorkInfo](#workinfo)> | 是 | 回调函数。如果workId有效,则返回从WorkSchedulerService获取的任务,否则抛出异常。 | 137 138**错误码**: 139 140以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 141 142| 错误码ID | 错误信息 | 143| ---- | --------------------- | 144| 9700001 | Memory operation failed. | 145| 9700002 | Parcel operation failed. | 146| 9700003 | System service operation failed. | 147| 9700004 | Check workInfo failed. | 148 149**示例**: 150 151```ts 152 import { BusinessError } from '@ohos.base'; 153 154 workScheduler.getWorkStatus(50, (error: BusinessError, res: workScheduler.WorkInfo) => { 155 if (error) { 156 console.error(`workschedulerLog getWorkStatus failed. code is ${error.code} message is ${error.message}`); 157 } else { 158 console.info(`workschedulerLog getWorkStatus success, ${JSON.stringify(res)}`); 159 } 160 }); 161``` 162 163## workScheduler.getWorkStatus 164 165getWorkStatus(workId: number): Promise\<WorkInfo> 166 167通过workId获取延迟任务,使用Promise异步回调。 168 169**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 170 171**参数**: 172 173| 参数名 | 类型 | 必填 | 说明 | 174| ------ | ------ | ---- | -------- | 175| workId | number | 是 | 延迟任务Id。 | 176 177**返回值**: 178 179| 类型 | 说明 | 180| ------------------------------- | ---------------------------------------- | 181| Promise\<[WorkInfo](#workinfo)> | Promise对象,如果workId有效,则返回从WorkSchedulerService获取的任务,否则抛出异常。 | 182 183**错误码**: 184 185以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 186 187| 错误码ID | 错误信息 | 188| ---- | --------------------- | 189| 9700001 | Memory operation failed. | 190| 9700002 | Parcel operation failed. | 191| 9700003 | System service operation failed. | 192| 9700004 | Check workInfo failed. | 193 194**示例**: 195 196```ts 197 import { BusinessError } from '@ohos.base'; 198 199 workScheduler.getWorkStatus(50).then((res: workScheduler.WorkInfo) => { 200 console.info(`workschedulerLog getWorkStatus success, ${JSON.stringify(res)}`); 201 }).catch((error: BusinessError) => { 202 console.error(`workschedulerLog getWorkStatus failed. code is ${error.code} message is ${error.message}`); 203 }) 204``` 205 206## workScheduler.obtainAllWorks<sup>deprecated<sup> 207 208obtainAllWorks(callback : AsyncCallback\<void>) : Array\<WorkInfo> 209> 从API version 10开始不再维护,建议使用[workScheduler.obtainAllWorks<sup>10+<sup>](#workschedulerobtainallworks10)替代 210 211获取当前应用所有的延迟任务,使用Callback异步回调。 212 213**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 214 215**参数**: 216 217| 参数名 | 类型 | 必填 | 说明 | 218| -------- | -------------------- | ---- | ------------------------------- | 219| callback | AsyncCallback\<void> | 是 | 回调函数,获取成功时,err为undefined,否则为错误对象。 | 220 221**错误码**: 222 223以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 224 225| 错误码ID | 错误信息 | 226| ---- | --------------------- | 227| 9700001 | Memory operation failed. | 228| 9700002 | Parcel operation failed. | 229| 9700003 | System service operation failed. | 230 231## workScheduler.obtainAllWorks<sup>10+<sup> 232 233obtainAllWorks(callback : AsyncCallback<Array<WorkInfo>>): void 234 235获取当前应用所有的延迟任务,使用Callback异步回调。 236 237**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 238 239**参数**: 240 241| 参数名 | 类型 | 必填 | 说明 | 242| -------- | -------------------- | ---- | ------------------------------- | 243| callback | AsyncCallback<Array<WorkInfo>> | 是 | 回调函数,获取成功时,err为undefined,否则为错误对象。 | 244 245**错误码**: 246 247以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 248 249| 错误码ID | 错误信息 | 250| ---- | --------------------- | 251| 9700001 | Memory operation failed. | 252| 9700002 | Parcel operation failed. | 253| 9700003 | System service operation failed. | 254 255**示例**: 256 257```ts 258 import { BusinessError } from '@ohos.base'; 259 260 workScheduler.obtainAllWorks((error: BusinessError, res: Array<workScheduler.WorkInfo>) =>{ 261 if (error) { 262 console.error(`workschedulerLog obtainAllWorks failed. code is ${error.code} message is ${error.message}`); 263 } else { 264 console.info(`workschedulerLog obtainAllWorks success, data is: ${JSON.stringify(res)}`); 265 } 266 }); 267``` 268 269## workScheduler.obtainAllWorks 270 271obtainAllWorks(): Promise\<Array\<WorkInfo>> 272 273获取当前应用所有的延迟任务,使用Promise异步回调。 274 275**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 276 277**返回值**: 278 279| 类型 | 说明 | 280| -------------------------------------- | ------------------------------ | 281| Promise<Array\<[WorkInfo](#workinfo)>> | Promise对象,返回当前应用所有的延迟任务。 | 282 283**错误码**: 284 285以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 286 287| 错误码ID | 错误信息 | 288| ---- | --------------------- | 289| 9700001 | Memory operation failed. | 290| 9700002 | Parcel operation failed. | 291| 9700003 | System service operation failed. | 292 293**示例**: 294 295```ts 296 import { BusinessError } from '@ohos.base'; 297 298 workScheduler.obtainAllWorks().then((res: Array<workScheduler.WorkInfo>) => { 299 console.info(`workschedulerLog obtainAllWorks success, data is: ${JSON.stringify(res)}`); 300 }).catch((error: BusinessError) => { 301 console.error(`workschedulerLog obtainAllWorks failed. code is ${error.code} message is ${error.message}`); 302 }) 303``` 304 305## workScheduler.stopAndClearWorks 306 307stopAndClearWorks(): void 308 309停止和取消当前应用所有的延迟任务。 310 311**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 312 313**错误码**: 314 315以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 316 317| 错误码ID | 错误信息 | 318| ---- | --------------------- | 319| 9700001 | Memory operation failed. | 320| 9700002 | Parcel operation failed. | 321| 9700003 | System service operation failed. | 322 323**示例**: 324 325```ts 326 import { BusinessError } from '@ohos.base'; 327 328 try{ 329 workScheduler.stopAndClearWorks(); 330 console.info(`workschedulerLog stopAndClearWorks success`); 331 } catch (error) { 332 console.error(`workschedulerLog stopAndClearWorks failed. code is ${(error as BusinessError).code} message is ${(error as BusinessError).message}`); 333 } 334``` 335 336## workScheduler.isLastWorkTimeOut<sup>deprecated<sup> 337 338isLastWorkTimeOut(workId: number, callback : AsyncCallback\<void>): boolean 339 340> 从API version 10开始不再维护,建议使用[workScheduler.isLastWorkTimeOut<sup>10+<sup>](#workschedulerislastworktimeout10)替代 341 342检查延迟任务的最后一次执行是否超时,使用Callback异步回调。 343 344**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 345 346**参数**: 347 348| 参数名 | 类型 | 必填 | 说明 | 349| -------- | -------------------- | ---- | ---------------------------------------- | 350| workId | number | 是 | 指定延迟任务的Id。 | 351| callback | AsyncCallback\<void> | 是 | 回调函数。 | 352 353**错误码**: 354 355以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 356 357| 错误码ID | 错误信息 | 358| ---- | --------------------- | 359| 9700001 | Memory operation failed. | 360| 9700002 | Parcel operation failed. | 361| 9700003 | System service operation failed. | 362| 9700004 | Check workInfo failed. | 363 364## workScheduler.isLastWorkTimeOut<sup>10+<sup> 365 366isLastWorkTimeOut(workId: number, callback : AsyncCallback\<boolean>): void 367 368检查延迟任务的最后一次执行是否超时,使用Callback异步回调。 369 370**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 371 372**参数**: 373 374| 参数名 | 类型 | 必填 | 说明 | 375| -------- | -------------------- | ---- | ---------------------------------------- | 376| workId | number | 是 | 指定延迟任务的Id。 | 377| callback | AsyncCallback\<boolean> | 是 | 回调函数。 | 378 379**错误码**: 380 381以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 382 383| 错误码ID | 错误信息 | 384| ---- | --------------------- | 385| 9700001 | Memory operation failed. | 386| 9700002 | Parcel operation failed. | 387| 9700003 | System service operation failed. | 388| 9700004 | Check workInfo failed. | 389 390**示例**: 391 392```ts 393 import { BusinessError } from '@ohos.base'; 394 395 workScheduler.isLastWorkTimeOut(500, (error: BusinessError, res: boolean) =>{ 396 if (error) { 397 console.error(`workschedulerLog isLastWorkTimeOut failed. code is ${error.code} message is ${error.message}`); 398 } else { 399 console.info(`workschedulerLog isLastWorkTimeOut success, data is: ${res}`); 400 } 401 }); 402``` 403 404## workScheduler.isLastWorkTimeOut 405 406isLastWorkTimeOut(workId: number): Promise\<boolean> 407 408检查延迟任务的最后一次执行是否超时,使用Promise形式返回。 409 410**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 411 412**参数**: 413 414| 参数名 | 类型 | 必填 | 说明 | 415| ------ | ------ | ---- | -------- | 416| workId | number | 是 | 指定延迟任务的Id。 | 417 418**返回值**: 419 420| 类型 | 说明 | 421| ----------------- | ---------------------------------------- | 422| Promise\<boolean> | Promise对象。返回true表示指定任务的最后一次执行超时,false表示未超时。 | 423 424**错误码**: 425 426以下错误码的详细介绍请参见[workScheduler错误码](../errorcodes/errorcode-workScheduler.md)。 427 428| 错误码ID | 错误信息 | 429| ---- | --------------------- | 430| 9700001 | Memory operation failed. | 431| 9700002 | Parcel operation failed. | 432| 9700003 | System service operation failed. | 433| 9700004 | Check workInfo failed. | 434 435**示例**: 436 437```ts 438 import { BusinessError } from '@ohos.base'; 439 440 workScheduler.isLastWorkTimeOut(500) 441 .then((res: boolean) => { 442 console.info(`workschedulerLog isLastWorkTimeOut success, data is: ${res}`); 443 }) 444 .catch((error: BusinessError) => { 445 console.error(`workschedulerLog isLastWorkTimeOut failed. code is ${error.code} message is ${error.message}`); 446 }); 447``` 448 449## WorkInfo 450 451延迟任务的具体信息。 452 453**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 454 455| 名称 | 类型 | 必填 | 说明 | 456| --------------- | --------------------------------- | ---- | ---------------- | 457| workId | number | 是 | 延迟任务ID。 | 458| bundleName | string | 是 | 延迟任务包名。 | 459| abilityName | string | 是 | 延迟任务回调通知的组件名。 | 460| networkType | [NetworkType](#networktype) | 否 | 网络类型。 | 461| isCharging | boolean | 否 | 是否充电。<br>- true表示充电触发延迟回调,false表示不充电触发延迟回调。| 462| chargerType | [ChargingType](#chargingtype) | 否 | 充电类型。 | 463| batteryLevel | number | 否 | 电量。 | 464| batteryStatus | [BatteryStatus](#batterystatus) | 否 | 电池状态。 | 465| storageRequest | [StorageRequest](#storagerequest) | 否 | 存储状态。 | 466| isRepeat | boolean | 否 | 是否循环任务。<br>- true表示循环任务,false表示非循环任务。 | 467| repeatCycleTime | number | 否 | 循环间隔,单位为毫秒。 | 468| repeatCount | number | 否 | 循环次数。 | 469| isPersisted | boolean | 否 | 是否持久化保存工作。<br>- true表示持久化保存工作。false表示非持久化保存工作。| 470| isDeepIdle | boolean | 否 | 是否要求设备进入空闲状态。<br>- true表示需要,false表示不需要。 | 471| idleWaitTime | number | 否 | 空闲等待时间,单位为毫秒。 | 472| parameters | [key: string]: number \| string \| boolean | 否 | 携带参数信息。 | 473 474## NetworkType 475 476触发延迟回调的网络类型。 477 478**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 479 480| 名称 | 值 | 说明 | 481| ---------------------- | ---- | ----------------------- | 482| NETWORK_TYPE_ANY | 0 | 表示这个触发条件是任何类型的网络连接。 | 483| NETWORK_TYPE_MOBILE | 1 | 表示这个触发条件是Mobile网络连接。 | 484| NETWORK_TYPE_WIFI | 2 | 表示这个触发条件是Wifi类型的网络连接。 | 485| NETWORK_TYPE_BLUETOOTH | 3 | 表示这个触发条件是Bluetooth网络连接。 | 486| NETWORK_TYPE_WIFI_P2P | 4 | 表示这个触发条件是Wifi P2P网络连接。 | 487| NETWORK_TYPE_ETHERNET | 5 | 表示这个触发条件是有线网络连接。 | 488 489## ChargingType 490 491触发延迟回调的充电类型。 492 493**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 494 495| 名称 | 值 | 说明 | 496| ------------------------- | ---- | -------------------- | 497| CHARGING_PLUGGED_ANY | 0 | 表示这个触发条件是任何类型的充电器连接。 | 498| CHARGING_PLUGGED_AC | 1 | 表示这个触发条件是直流充电器连接。 | 499| CHARGING_PLUGGED_USB | 2 | 表示这个触发条件是USB充连接。 | 500| CHARGING_PLUGGED_WIRELESS | 3 | 表示这个触发条件是无线充电器连接。 | 501 502## BatteryStatus 503 504触发延迟回调的电池状态。 505 506**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 507 508| 名称 | 值 | 说明 | 509| -------------------------- | ---- | -------------------------- | 510| BATTERY_STATUS_LOW | 0 | 表示这个触发条件是低电告警。 | 511| BATTERY_STATUS_OKAY | 1 | 表示这个触发条件是从低电恢复到正常电量。 | 512| BATTERY_STATUS_LOW_OR_OKAY | 2 | 表示这个触发条件是从低电恢复到正常电量或者低电告警。 | 513 514## StorageRequest 515 516触发延迟回调的存储状态。 517 518**系统能力**:SystemCapability.ResourceSchedule.WorkScheduler 519 520| 名称 | 值 | 说明 | 521| ------------------------- | ---- | ------------------------------ | 522| STORAGE_LEVEL_LOW | 0 | 表示这个触发条件是存储空间不足。 | 523| STORAGE_LEVEL_OKAY | 1 | 表示这个触发条件是从存储空间不足恢复到正常。 | 524| STORAGE_LEVEL_LOW_OR_OKAY | 2 | 表示这个触发条件是存储空间不足或者从存储空间不足恢复到正常。 |