未验证 提交 ac819e96 编写于 作者: O openharmony_ci 提交者: Gitee

!10688 资源调度后台任务错误码api文档修改

Merge pull request !10688 from 朱天怡/master
# 接口
# 接口
- [开发说明](development-intro.md)
- Ability框架
- FA模型
......@@ -116,11 +116,11 @@
- [@ohos.intl (国际化-Intl)](js-apis-intl.md)
- [@ohos.resourceManager (资源管理)](js-apis-resource-manager.md)
- 资源调度
- [@ohos.backgroundTaskManager (后台任务管理)](js-apis-backgroundTaskManager.md)
- [@ohos.distributedMissionManager (分布式任务管理)](js-apis-distributedMissionManager.md)
- [@ohos.reminderAgentManager (后台代理提醒)](js-apis-reminderAgentManager.md)
- [@ohos.resourceschedule.backgroundTaskManager (后台任务管理)](js-apis-resourceschedule-backgroundTaskManager.md)
- [@ohos.resourceschedule.workScheduler (延迟任务调度)](js-apis-resourceschedule-workScheduler.md)
- [@ohos.resourceschedule.usageStatistics (设备使用信息统计)](js-apis-resourceschedule-deviceUsageStatistics.md)
- [@ohos.workScheduler (延迟任务调度)](js-apis-workScheduler.md)
- [@ohos.WorkSchedulerExtensionAbility (延迟任务调度回调)](js-apis-WorkSchedulerExtensionAbility.md)
- 定制管理
- [@ohos.configPolicy (配置策略)](js-apis-config-policy.md)
......@@ -269,6 +269,7 @@
- [@ohos.application.testRunner (TestRunner)](js-apis-testRunner.md)
- [@ohos.uitest (UiTest)](js-apis-uitest.md)
- 已停止维护的接口
- [@ohos.backgroundTaskManager (后台任务管理)](js-apis-backgroundTaskManager.md)
- [@ohos.bundleState (设备使用信息统计)](js-apis-deviceUsageStatistics.md)
- [@ohos.bytrace (性能打点)](js-apis-bytrace.md)
- [@ohos.data.storage (轻量级存储)](js-apis-data-storage.md)
......
......@@ -28,7 +28,7 @@ onWorkStart(work: workScheduler.WorkInfo): void
| 参数名 | 类型 | 必填 | 说明 |
| ---- | ---------------------------------------- | ---- | -------------- |
| work | [workScheduler.WorkInfo](js-apis-workScheduler.md#workinfo) | 是 | 指示要添加到执行队列的工作。 |
| work | [workScheduler.WorkInfo](js-apis-resourceschedule-workScheduler.md#workinfo) | 是 | 指示要添加到执行队列的工作。 |
**示例:**
......@@ -52,7 +52,7 @@ onWorkStop(work: workScheduler.WorkInfo): void
| 参数名 | 类型 | 必填 | 说明 |
| ---- | ---------------------------------------- | ---- | -------------- |
| work | [workScheduler.WorkInfo](js-apis-workScheduler.md#workinfo) | 是 | 指示要添加到执行队列的工作。 |
| work | [workScheduler.WorkInfo](js-apis-resourceschedule-workScheduler.md#workinfo) | 是 | 指示要添加到执行队列的工作。 |
**示例:**
......
......@@ -11,7 +11,8 @@
对于系统特权应用,提供独立的能效资源申请接口。系统特权应用如果需要使用特定的系统资源,例如需要在被挂起期间仍然能够收到系统公共事件,可以使用能效资源申请接口。
> **说明:**
> 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
> - 从API Version 9 开始,该接口不再维护,推荐使用新接口[@ohos.resourceschedule.backgroundTaskManager (后台任务管理)](js-apis-resourceschedule-backgroundTaskManager.md)
> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
## 导入模块
......@@ -32,12 +33,14 @@ requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspen
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------------------- | ---- | ------------------------------ |
| reason | string | 是 | 延迟挂起申请的原因。 |
| callback | Callback<void> | 是 | 延迟即将超时的回调函数,一般在超时前6秒通过此回调通知应用。 |
**返回值**
| 类型 | 说明 |
| ------------------------------------- | --------- |
| [DelaySuspendInfo](#delaysuspendinfo) | 返回延迟挂起信息。 |
......@@ -45,6 +48,8 @@ requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspen
**示例**
```js
import backgroundTaskManager from '@ohos.backgroundTaskManager';
let myReason = 'test requestSuspendDelay';
let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => {
console.info("Request suspension delay will time out.");
......@@ -66,6 +71,7 @@ getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>):
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | --------------------------- | ---- | ---------------------------------------- |
| requestId | number | 是 | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
......@@ -74,6 +80,8 @@ getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>):
**示例**
```js
import backgroundTaskManager from '@ohos.backgroundTaskManager';
let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
backgroundTaskManager.getRemainingDelayTime(delayInfo.requestId, (err, res) => {
if(err) {
......@@ -94,16 +102,19 @@ getRemainingDelayTime(requestId: number): Promise<number>
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------ | ---- | ---------- |
| requestId | number | 是 | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
**返回值**
| 类型 | 说明 |
| --------------------- | ---------------------------------------- |
| Promise<number> | 指定的Promise回调方法。返回应用程序进入挂起状态之前的剩余时间,以毫秒为单位。 |
**示例**
```js
let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
backgroundTaskManager.getRemainingDelayTime(delayInfo.requestId).then( res => {
......@@ -123,11 +134,13 @@ cancelSuspendDelay(requestId: number): void
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ------ | ---- | ---------- |
| requestId | number | 是 | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
**示例**
```js
let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
backgroundTaskManager.cancelSuspendDelay(delayInfo.requestId);
......@@ -145,6 +158,7 @@ startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: Want
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| --------- | ---------------------------------- | ---- | ---------------------------------------- |
| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-Context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 |
......@@ -244,6 +258,7 @@ startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: Want
| wantAgent | [WantAgent](js-apis-wantAgent.md) | 是 | 通知参数,用于指定长时任务通知点击跳转的界面。 |
**返回值**
| 类型 | 说明 |
| -------------- | ---------------- |
| Promise\<void> | 使用Promise形式返回结果。 |
......@@ -321,6 +336,7 @@ stopBackgroundRunning(context: Context, callback: AsyncCallback&lt;void&gt;): vo
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| -------- | ------------------------- | ---- | ---------------------------------------- |
| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-Context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 |
......@@ -376,11 +392,13 @@ stopBackgroundRunning(context: Context): Promise&lt;void&gt;
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------- | ---- | ---------------------------------------- |
| context | Context | 是 | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-Context.md)<br>Stage模型的应用Context定义见[Context](js-apis-ability-context.md)。 |
**返回值**
| 类型 | 说明 |
| -------------- | ---------------- |
| Promise\<void> | 使用Promise形式返回结果。 |
......@@ -418,68 +436,6 @@ export default class MainAbility extends Ability {
};
```
## backgroundTaskManager.applyEfficiencyResources<sup>9+</sup>
applyEfficiencyResources(request: [EfficiencyResourcesRequest](#efficiencyresourcesrequest9)): boolean
向系统申请或释放能效资源,使用boolean形式返回结果。
通过EfficiencyResourcesRequest参数中的isApply变量,设置是申请还是释放。
应用使用此接口,需要向应用中心申请获得相应特权。
进程和它所属的应用可以同时申请某一类资源,例如CPU资源,但是应用释放资源的时候会将进程的资源一起释放。
**系统能力**: SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply
**系统API**: 此接口为系统接口。
**参数**
| 参数名 | 类型 | 必填 | 说明 |
| ------- | ------- | ---- | ---------------------------------------- |
| request | [EfficiencyResourcesRequest](#efficiencyresourcesrequest9) | 是 | 请求的必要信息。包括资源类型,超时时间等信息。详见[EfficiencyResourcesRequest](#efficiencyresourcesrequest9)。 |
**返回值**
| 类型 | 说明 |
| -------------- | ---------------- |
| boolean | true代表申请成功,false代表申请失败。 |
**示例**
```js
import backgroundTaskManager from '@ohos.backgroundTaskManager';
let request = {
resourceTypes: backgroundTaskManager.ResourceType.CPU,
// 如果将isApply置为false,则表示释放资源
isApply: true,
timeOut: 0,
reason: "apply",
isPersist: true,
isProcess: false,
};
let res = backgroundTaskManager.applyEfficiencyResources(request);
console.info("result of applyEfficiencyResources is: " + res)
```
## backgroundTaskManager.resetAllEfficiencyResources<sup>9+</sup>
resetAllEfficiencyResources(): void
释放所有已经申请的资源。
应用使用此接口,需要向应用中心申请获得相应特权。
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply
**系统API**: 此接口为系统接口。
**示例**
```js
import backgroundTaskManager from '@ohos.backgroundTaskManager';
backgroundTaskManager.resetAllEfficiencyResources();
```
## DelaySuspendInfo
延迟挂起信息。
......@@ -506,39 +462,4 @@ backgroundTaskManager.resetAllEfficiencyResources();
| MULTI_DEVICE_CONNECTION | 6 | 多设备互联。 |
| WIFI_INTERACTION | 7 | WLAN相关<br />此接口为系统接口。 |
| VOIP | 8 | 音视频通话<br />此接口为系统接口。 |
| TASK_KEEPING | 9 | 计算任务(仅在特定设备生效)。 |
## EfficiencyResourcesRequest<sup>9+</sup>
能效资源申请参数。
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply
**系统API**: 此接口为系统接口。
| 参数名 | 类型 | 必填 | 说明 |
| --------------- | ------ | ---- | ---------------------------------------- |
| resourceTypes | number | 是 | 申请的资源类型。 |
| isApply | boolean | 是 | 申请资源或者是释放资源。 |
| timeOut | number | 是 | 资源的使用时间,以毫秒为单位。 |
| isPersist | boolean | 否 | 是否永久持有资源,如果是true,那么timeOut就无效。 |
| isProcess | boolean | 否 | 应用申请或者是进程申请。 |
| reason | string | 是 | 申请资源的原因。 |
## ResourceType<sup>9+</sup>
能效资源类型。
**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply
**系统API**: 此接口为系统接口。
| 参数名 | 参数值 | 描述 |
| ----------------------- | ---- | --------------------- |
| CPU | 1 | CPU资源,申请后不被挂起。 |
| COMMON_EVENT | 2 | 公共事件,申请后挂起状态下不被代理掉。 |
| TIMER | 4 | 计时器,申请后挂起状态下不被代理掉。 |
| WORK_SCHEDULER | 8 | 延迟任务,申请后有更长的执行时间。 |
| BLUETOOTH | 16 | 蓝牙相关,申请后挂起状态下不被代理掉。 |
| GPS | 32 | GPS相关,申请后挂起状态下不被代理掉。 |
| AUDIO | 64 | 音频资源,申请后挂起状态下不被代理掉。 |
\ No newline at end of file
| TASK_KEEPING | 9 | 计算任务(仅在特定设备生效)。 |
\ No newline at end of file
# backgroundTaskManager错误码
## 9800001 内存操作失败
**错误信息**
Memory operation failed.
**可能原因**
1. 系统内存泄漏。
2. 系统内存不足。
**处理步骤**
1. 内存不足,请释放内存。
2. 请检查是否内存泄漏。
## 9800002 Parcel读写操作失败
**错误信息**
Parcel operation failed.
**可能原因**
调用MessageParcel对象读取或写入对象异常。
**处理步骤**
系统内部工作异常,请稍候重试,或者重启设备尝试。
## 9800003 IPC通信失败
**错误信息**
Inner transact failed.
**可能原因**
IPC通信失败。
**处理步骤**
系统内部工作异常,请稍候重试,或者重启设备尝试。
## 9800004 系统服务失败
**错误信息**
System service operation failed.
**可能原因**
1. 系统服务还未启动。
2. 系统服务异常。
**处理步骤**
系统服务内部工作异常,请稍候重试,或者重启设备尝试。
## 9800005 长时任务校验失败
**错误信息**
Background task verification failed.
**可能原因**
1. 应用重复申请长时任务。
2. 应用重复取消长时任务。
3. bgMode无效,应用配置文件属性backgroundModes没有配置任何长时任务类型。
4. 只有PC设备才能申请长时任务KEEPING_TASK。
5. 只有系统应用才能申请长时任务WIFI_INTERACTION或VOIP。
**处理步骤**
1. 请检查应用代码。
2. 请检查应用是否拥有系统权限。
3. 请检查应用所在设备类型。
4. 请检查应用配置属性backgroundModes。
## 9800006 长时任务通知信息校验失败
**错误信息**
Notification verification failed.
**可能原因**
1. 缓存在资源子系统的长时任务通知信息资源加载失败。
2. 通知子系统服务异常。
**处理步骤**
1. 请检查系统长时任务资源"ohos.backgroundtaskmgr.resources"是否存在。
2. 系统服务内部工作异常,请稍候重试,或者重启设备尝试。
## 9800007 长时任务信息存储失败
**错误信息**
Task storage failed.
**可能原因**
1. 创建存储任务文件失败。
2. 获取真实文件路径失败。
3. 打开存储任务文件失败。
**处理步骤**
1. 请检查文件/data/service/el1/public/background_task_mgr/running_task。
2. 系统内部工作异常,请稍候重试,或者重启设备尝试。
## 9900001 短时任务调用方信息校验失败
**错误信息**
Caller information verification failed.
**可能原因**
1. 获取调用方的uid或pid错误。
2. 获取调用方的bundleName错误。
3. 取消短时任务时传入的requestId无效,在申请短时任务的列表中找不到对应的requestId。
**处理步骤**
1. 请检查应用uid是否存在。
2. 请检查应用是否申请了短时任务。
3. 系统服务内部工作异常,请稍候重试,或者重启设备尝试。
## 9900002 短时任务校验失败
**错误信息**
Background task verification failed.
**可能原因**
1. requestSuspendDelay()方法传递的callback对象已存在。
2. cancelSuspendDelay()方法传递的callback对象不存在。
3. 应用退入后台后5s内允许申请短时任务。
4. 应用申请短时任务数量不能超过3个。
5. 应用申请短时任务每日剩余配额不足。
**处理步骤**
1. 请检查应用自身代码逻辑。
2. 应用运行短时任务完毕及时释放。
## 18700001 资源申请接口信息校验失败
**错误信息**
Caller information verification failed.
**可能原因**
1. 获取调用方的uid或pid错误。
2. 申请资源的resourceTypes超过上限。
**处理步骤**
请检查输入的参数。
\ No newline at end of file
# workScheduler错误码
## 9700001 内存操作失败
**错误信息**
Memory operation failed.
**可能原因**
1. 系统内存泄漏。
2. 系统内存不足。
**处理步骤**
1. 内存不足,请释放内存。
2. 请检查是否内存泄漏。
## 9700002 Parcel读写操作失败
**错误信息**
Parcel operation failed.
**可能原因**
调用MessageParcel对象读取或写入对象异常。
**处理步骤**
系统内部工作异常,请稍候重试,或者重启设备尝试。
## 9700003 系统服务失败
**错误信息**
System service operation failed.
**可能原因**
1. 系统服务还未启动。
2. 系统服务异常。
**处理步骤**
系统服务内部工作异常,请稍候重试,或者重启设备尝试。
## 9700004 workInfo校验失败
**错误信息**
Check workInfo failed.
**可能原因**
1. workInfo中的bundleName和应用的uid不匹配。
2. 取消或查询延迟任务时,延迟任务不存在。
**处理步骤**
请检查workInfo参数。
## 9700005 StartWork失败
**错误信息**
StartWork failed.
**可能原因**
1. 延迟任务已存在。
2. 每个应用uid最多添加10个延迟任务。
3. 重复任务设置的重复时间应至少为20分钟。
**处理步骤**
请检查输入的参数和代码逻辑。
## 长时任务
# 长时任务
### 场景说明
## 场景说明
如果应用需要在后台长时间执行用户可感知的任务,如后台播放音乐、导航、设备连接、VoIP等,则使用长时任务避免进入挂起(Suspend)状态。
长时任务在后台执行没有时间限制。为了避免该机制被滥用,系统只允许申请有限个数的长时任务类型,同时会有相应的通知提示与长时任务相关联,使用户可感知,并且系统会添加相应的校验机制,确保应用是的确在执行相应的长时任务。
### 权限
## 接口说明
ohos.permission.KEEP_BACKGROUND_RUNNING
### 接口说明
**表2** 长时任务主要接口
**表1** 长时任务主要接口
| 接口名 | 描述 |
| ---------------------------------------- | ---------------------------- |
......@@ -21,7 +17,7 @@ ohos.permission.KEEP_BACKGROUND_RUNNING
其中,wantAgent的信息详见([WantAgent](../reference/apis/js-apis-wantAgent.md)
**表3** 后台模式类型
**表2** 后台模式类型
| 参数名 | id值 | 描述 | 配置项 |
| ----------------------- | ---- | -------------- | --------------------- |
......@@ -36,9 +32,9 @@ ohos.permission.KEEP_BACKGROUND_RUNNING
| TASK_KEEPING | 9 | 计算任务(仅供特定设备使用) | taskKeeping |
### 开发步骤
## 开发步骤
基于FA模型:
### 基于FA模型
基于FA的Service Ability使用,参考[ServiceAbility开发指导](../ability/fa-serviceability.md)
......@@ -46,7 +42,7 @@ ohos.permission.KEEP_BACKGROUND_RUNNING
当需要与后台执行的长时任务交互时(如播放音乐等)。可以采用connectAbility()方法启动并连接Service Ability。在获取到服务的代理对象后,与服务进行通信,控制长时任务的申请和取消。
1、新建Api Version 8的工程后,在工程目录中右键选择“new” -> “Ability” -> “Service Ability” 快速创建Service Ability组件。并在config.json文件中配置长时任务权限、后台模式类型,其中Ability类型为“service”。
1、新建Api Version 8的工程后,在工程目录中右键选择“new” -> “Ability” -> “Service Ability” 快速创建Service Ability组件。并在config.json文件中配置长时任务权限ohos.permission.KEEP_BACKGROUND_RUNNING、后台模式类型,其中Ability类型为“service”。
```
"module": {
......@@ -71,7 +67,7 @@ ohos.permission.KEEP_BACKGROUND_RUNNING
2、在Service Ability调用长时任务的申请和取消接口。
```js
import backgroundTaskManager from '@ohos.backgroundTaskManager';
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
import featureAbility from '@ohos.ability.featureAbility';
import wantAgent from '@ohos.wantAgent';
import rpc from "@ohos.rpc";
......@@ -95,21 +91,29 @@ function startContinuousTask() {
// 通过wantAgent模块的getWantAgent方法获取WantAgent对象
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
backgroundTaskManager.startBackgroundRunning(featureAbility.getContext(),
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation startBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.startBackgroundRunning(featureAbility.getContext(),
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation startBackgroundRunning failed Cause: " + err);
});
} catch (error) {
console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
});
}
function stopContinuousTask() {
backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext()).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation stopBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext()).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation stopBackgroundRunning failed Cause: " + err);
});
} catch (error) {
console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
}
async function processAsyncJobs() {
......@@ -173,11 +177,11 @@ export default {
};
```
基于Stage模型:
### 基于Stage模型
Stage模型的相关信息参考[Stage模型综述](../ability/stage-brief.md)
1、新建Api Version 9的工程后,在工程目录中右键选择“New” -> “Ability” 快速创建Ability组件。并在module.json5文件中配置长时任务权限、后台模式类型。
1、新建Api Version 9的工程后,在工程目录中右键选择“New” -> “Ability” 快速创建Ability组件。并在module.json5文件中配置长时任务权限ohos.permission.KEEP_BACKGROUND_RUNNING、后台模式类型。
```
"module": {
......@@ -201,7 +205,7 @@ Stage模型的相关信息参考[Stage模型综述](../ability/stage-brief.md)
```ts
import wantAgent from '@ohos.wantAgent';
import backgroundTaskManager from '@ohos.backgroundTaskManager';
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
@Entry
@Component
......@@ -229,21 +233,29 @@ struct Index {
// 通过wantAgent模块的getWantAgent方法获取WantAgent对象
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
backgroundTaskManager.startBackgroundRunning(this.context,
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation startBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.startBackgroundRunning(this.context,
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation startBackgroundRunning failed Cause: " + err);
});
} catch (error) {
console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
});
}
stopContinuousTask() {
backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation stopBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation stopBackgroundRunning failed Cause: " + err);
});
} catch (error) {
console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
}
build() {
......@@ -282,7 +294,7 @@ struct Index {
```ts
import Ability from '@ohos.application.Ability'
import backgroundTaskManager from '@ohos.backgroundTaskManager';
import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
import wantAgent from '@ohos.wantAgent';
const MSG_SEND_METHOD: string = 'CallSendMsg'
......@@ -308,21 +320,29 @@ function startContinuousTask() {
// 通过wantAgent模块的getWantAgent方法获取WantAgent对象
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
backgroundTaskManager.startBackgroundRunning(mContext,
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation startBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.startBackgroundRunning(featureAbility.getContext(),
backgroundTaskManager.BackgroundMode.DATA_TRANSFER, wantAgentObj).then(() => {
console.info("Operation startBackgroundRunning succeeded");
}).catch((error) => {
console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
});
} catch (error) {
console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
});
}
function stopContinuousTask() {
backgroundTaskManager.stopBackgroundRunning(mContext).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error("Operation stopBackgroundRunning failed Cause: " + err);
});
try {
backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext()).then(() => {
console.info("Operation stopBackgroundRunning succeeded");
}).catch((err) => {
console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
});
} catch (error) {
console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
}
}
class MySequenceable {
......
## 短时任务
# 短时任务
### 场景说明
## 场景说明
当应用退到后台默认有6到12秒的运行时长,超过该时间后,系统会将应用置为挂起状态。对于绝大多数应用,6到12秒的时间,足够执行一些重要的任务,但如果应用需要更多的时间,可以通过短时任务接口,扩展应用的执行时间。
建议不要等到应用退后台后,才调用requestSuspendDelay方法申请延迟挂起,而是应该在执行任何的耗时操作前,都应该调用该接口,向系统申明扩展应用的执行时间。
......@@ -11,7 +11,7 @@
一些典型的耗时任务有,需要保存一些状态数据到本地数据库,需要打开和处理一个大型文件,需要同步一些数据到应用的云端服务器等。
### 接口说明
## 接口说明
**表1** 短时任务主要接口
......@@ -23,7 +23,7 @@
| cancelSuspendDelay(requestId:&nbsp;number):&nbsp;void | 取消延迟挂起。 |
### 开发步骤
## 开发步骤
1、当应用需要开始执行一个耗时的任务时。调用短时任务申请接口,并且在任务执行完后,调用短时任务取消接口。
......
......@@ -4,49 +4,37 @@
应用要执行对实时性要求不高的任务或持久性任务的时候,比如设备空闲时候做一次数据学习等场景,可以使用延迟调度任务,该机制在满足应用设定条件的时候,会根据系统当前状态,如内存、功耗、温度等统一决策调度时间。延迟任务调度约束见[延迟任务调度约束](./background-task-overview.md#延迟任务调度约束)
## 接口说明
注册相关接口包导入:
```js
import workScheduler from '@ohos.workScheduler';
```
回调相关接口包导入:
```js
import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility';
```
### 延迟任务调度
**表1** workScheduler主要接口
接口名 | 接口描述
---------------------------------------------------------|-----------------------------------------
startWork(work: WorkInfo): boolean; | 延迟调度任务申请
stopWork(work: WorkInfo, needCancel?: boolean): boolean; | 延迟调度任务取消
startWork(work: WorkInfo): void; | 延迟调度任务申请
stopWork(work: WorkInfo, needCancel?: boolean): void; | 延迟调度任务取消
getWorkStatus(workId: number, callback: AsyncCallback\<WorkInfo>): void;| 获取延迟调度任务状态(Callback形式)
getWorkStatus(workId: number): Promise\<WorkInfo>; | 获取延迟调度任务状态(Promise形式)
obtainAllWorks(callback: AsyncCallback\<void>): Array\<WorkInfo>;| 获取所有延迟调度任务(Callback形式)
obtainAllWorks(): Promise<Array\<WorkInfo>>;| 获取所有延迟调度任务(Promise形式)
stopAndClearWorks(): boolean;| 停止并清除任务
stopAndClearWorks(): void;| 停止并清除任务
isLastWorkTimeOut(workId: number, callback: AsyncCallback\<void>): boolean;| 获取上次任务是否超时(针对RepeatWork,Callback形式)
isLastWorkTimeOut(workId: number): Promise\<boolean>;| 获取上次任务是否超时(针对RepeatWork,Promise形式)
**表2** WorkInfo包含参数
> **说明:** WorkInfo设置参数约束见[延迟任务调度约束](./background-task-overview.md#延迟任务调度约束)
WorkInfo设置参数约束见[延迟任务调度约束](./background-task-overview.md#延迟任务调度约束)
参数名| 类型 |描述
---------------------------------------------------------|-----------------------------------------|---------------------------------------------------------
workId| number | 延迟任务Id(必填)
bundleName| string | 延迟任务包名(必填)
abilityName| string | 延迟任务回调通知的组件名(必填)
networkType | [NetworkType](../reference/apis/js-apis-workScheduler.md#networktype) | 网络类型
networkType | [NetworkType](../reference/apis/js-apis-resourceschedule-workScheduler.md#networktype) | 网络类型
isCharging| boolean | 是否充电
chargerType| [ChargingType](../reference/apis/js-apis-workScheduler.md#chargingtype) | 充电类型
chargerType| [ChargingType](../reference/apis/js-apis-resourceschedule-workScheduler.md#chargingtype) | 充电类型
batteryLevel| number | 电量
batteryStatus| [BatteryStatus](../reference/apis/js-apis-workScheduler.md#batterystatus) | 电池状态
storageRequest| [StorageRequest](../reference/apis/js-apis-workScheduler.md#storagerequest) |存储状态
batteryStatus| [BatteryStatus](../reference/apis/js-apis-resourceschedule-workScheduler.md#batterystatus) | 电池状态
storageRequest| [StorageRequest](../reference/apis/js-apis-resourceschedule-workScheduler.md#storagerequest) |存储状态
isRepeat| boolean |是否循环任务
repeatCycleTime| number |循环间隔
repeatCount | number|循环次数
......@@ -61,7 +49,19 @@ onWorkStop(work: WorkInfo): void | 延迟调度任务结束回调
### 开发步骤
1、开发对应的ExtensionAbility,用于回调执行具体的延迟任务。关于ExtensionAbility的介绍,参考[ExtensionAbility机制](../ability/stage-brief.md#extensionability机制)
1、导入模块。
注册相关接口包导入:
```js
import workScheduler from '@ohos.resourceschedule.workScheduler';
```
回调相关接口包导入:
```js
import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility';
```
2、开发对应的ExtensionAbility,用于回调执行具体的延迟任务。关于ExtensionAbility的介绍,参考[ExtensionAbility机制](../ability/stage-brief.md#extensionability机制)
```ts
import WorkSchedulerExtensionAbility from '@ohos.WorkSchedulerExtensionAbility';
......@@ -77,11 +77,11 @@ export default class MyExtension extends WorkSchedulerExtensionAbility {
```
2、注册延迟任务
3、注册延迟任务
```ts
import workScheduler from '@ohos.workScheduler';
import workScheduler from '@ohos.resourceschedule.workScheduler';
let workInfo = {
workId: 1,
batteryStatus:workScheduler.BatteryStatus.BATTERY_STATUS_LOW,
......@@ -96,15 +96,19 @@ let workInfo = {
mykey3: 1.5
}
}
var res = workScheduler.startWork(workInfo);
console.info("workschedulerLog res:" + res);
try{
workScheduler.startWork(workInfo);
console.info('workschedulerLog startWork success');
} catch (error) {
console.error(`workschedulerLog startwork failed. code is ${error.code} message is ${error.message}`);
}
```
3、取消延迟任务
4、取消延迟任务
```ts
import workScheduler from '@ohos.workScheduler';
import workScheduler from '@ohos.resourceschedule.workScheduler';
let workInfo = {
workId: 1,
......@@ -120,51 +124,75 @@ let workInfo = {
mykey3: 1.5
}
}
var res = workScheduler.stopWork(workInfo, false);
console.info("workschedulerLog res:" + res);
try{
workScheduler.stopWork(workInfo, false);
console.info('workschedulerLog stopWork success');
} catch (error) {
console.error(`workschedulerLog stopWork failed. code is ${error.code} message is ${error.message}`);
}
```
4、获取指定延迟任务
5、获取指定延迟任务
```ts
workScheduler.getWorkStatus(50).then((res) => {
for (let item in res) {
console.info('workschedulerLog getWorkStatus success,' + item + ' is:' + res[item]);
}
}).catch((err) => {
console.info('workschedulerLog getWorkStatus failed, because:' + err.code);
})
try{
workScheduler.getWorkStatus(50, (error, res) => {
if (error) {
console.error(`workschedulerLog getWorkStatus failed. code is ${error.code} message is ${error.message}`);
} else {
for (let item in res) {
console.info(`workschedulerLog getWorkStatus success, ${item} is: ${res[item]}`);
}
}
});
} catch (error) {
console.error(`workschedulerLog getWorkStatus failed. code is ${error.code} message is ${error.message}`);
}
```
5、获取所有延迟任务
6、获取所有延迟任务
```ts
workScheduler.obtainAllWorks().then((res) => {
console.info('workschedulerLog obtainAllWorks success, data is:' + JSON.stringify(res));
}).catch((err) => {
console.info('workschedulerLog obtainAllWorks failed, because:' + err.code);
})
try{
workScheduler.obtainAllWorks((error, res) =>{
if (error) {
console.error(`workschedulerLog obtainAllWorks failed. code is ${error.code} message is ${error.message}`);
} else {
console.info(`workschedulerLog obtainAllWorks success, data is: ${JSON.stringify(res)}`);
}
});
} catch (error) {
console.error(`workschedulerLog obtainAllWorks failed. code is ${error.code} message is ${error.message}`);
}
```
6、停止并清除任务
7、停止并清除任务
```ts
let res = workScheduler.stopAndClearWorks();
console.info("workschedulerLog res:" + res);
try{
workScheduler.stopAndClearWorks();
console.info(`workschedulerLog stopAndClearWorks success`);
} catch (error) {
console.error(`workschedulerLog stopAndClearWorks failed. code is ${error.code} message is ${error.message}`);
}
```
7、判断上次执行是否超时
8、判断上次执行是否超时
```ts
workScheduler.isLastWorkTimeOut(500)
.then(res => {
console.info('workschedulerLog isLastWorkTimeOut success, data is:' + res);
})
.catch(err => {
console.info('workschedulerLog isLastWorkTimeOut failed, because:' + err.code);
try{
workScheduler.isLastWorkTimeOut(500, (error, res) =>{
if (error) {
onsole.error(`workschedulerLog isLastWorkTimeOut failed. code is ${error.code} message is ${error.message}`);
} else {
console.info(`workschedulerLog isLastWorkTimeOut success, data is: ${res}`);
}
});
} catch (error) {
console.error(`workschedulerLog isLastWorkTimeOut failed. code is ${error.code} message is ${error.message}`);
}
```
## 相关实例
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册