• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.backgroundTaskManager (后台任务管理)
2
3本模块提供后台任务管理能力。
4
5当应用或业务模块处于后台(无可见界面)时,如果有需要继续执行或者后续执行的业务,可基于业务类型,申请短时任务延迟挂起(Suspend)或者长时任务避免进入挂起状态。
6
7应用有不可中断且短时间能完成的任务时(如,用户在文件管理器上点击垃圾文件清理,若清理未完成时退到后台,文件管理器需要申请短时任务完成清理),可以使用短时任务机制。
8
9应用中存在用户能够直观感受到的且需要一直在后台运行的业务时(如,后台播放音乐),可以使用长时任务机制。
10
11对于系统特权应用,提供独立的能效资源申请接口。系统特权应用如果需要使用特定的系统资源,例如需要在被挂起期间仍然能够收到系统公共事件,可以使用能效资源申请接口。
12
13>  **说明:**
14> - 从API Version 9 开始,该接口不再维护,推荐使用新接口[@ohos.resourceschedule.backgroundTaskManager (后台任务管理)](js-apis-resourceschedule-backgroundTaskManager.md)
15> - 本模块首批接口从API version 7开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
16
17
18## 导入模块
19
20```js
21import backgroundTaskManager from '@ohos.backgroundTaskManager';
22```
23
24
25## backgroundTaskManager.requestSuspendDelay
26
27requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspendInfo
28
29后台应用申请延迟挂起。
30
31延迟挂起时间一般情况下默认值为3分钟,低电量(依据系统低电量广播)时默认值为1分钟。
32
33**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
34
35**参数**:
36
37| 参数名      | 类型                   | 必填   | 说明                             |
38| -------- | -------------------- | ---- | ------------------------------ |
39| reason   | string               | 是    | 延迟挂起申请的原因。                     |
40| callback | Callback<void> | 是    | 延迟即将超时的回调函数,一般在超时前6秒通过此回调通知应用。 |
41
42**返回值**:
43
44| 类型                                    | 说明        |
45| ------------------------------------- | --------- |
46| [DelaySuspendInfo](#delaysuspendinfo) | 返回延迟挂起信息。 |
47
48**示例**:
49
50  ```js
51  import backgroundTaskManager from '@ohos.backgroundTaskManager';
52
53  let myReason = 'test requestSuspendDelay';
54  let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => {
55      console.info("Request suspension delay will time out.");
56  })
57
58  let id = delayInfo.requestId;
59  let time = delayInfo.actualDelayTime;
60  console.info("The requestId is: " + id);
61  console.info("The actualDelayTime is: " + time);
62  ```
63
64
65## backgroundTaskManager.getRemainingDelayTime
66
67getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>): void
68
69获取应用程序进入挂起状态前的剩余时间,使用callback形式返回。
70
71**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
72
73**参数**:
74
75| 参数名       | 类型                          | 必填   | 说明                                       |
76| --------- | --------------------------- | ---- | ---------------------------------------- |
77| requestId | number                      | 是    | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
78| callback  | AsyncCallback<number> | 是    | 指定的callback回调方法。用于返回应用程序进入挂起状态之前的剩余时间,以毫秒为单位。 |
79
80**示例**:
81
82  ```js
83  import backgroundTaskManager from '@ohos.backgroundTaskManager';
84
85  let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
86  backgroundTaskManager.getRemainingDelayTime(delayInfo.requestId, (err, res) => {
87      if(err) {
88          console.log('callback => Operation getRemainingDelayTime failed. Cause: ' + err.code);
89      } else {
90          console.log('callback => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
91      }
92  })
93  ```
94
95
96## backgroundTaskManager.getRemainingDelayTime
97
98getRemainingDelayTime(requestId: number): Promise<number>
99
100获取应用程序进入挂起状态前的剩余时间,使用Promise形式返回。
101
102**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
103
104**参数**:
105
106| 参数名       | 类型     | 必填   | 说明         |
107| --------- | ------ | ---- | ---------- |
108| requestId | number | 是    | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
109
110**返回值**:
111
112| 类型                    | 说明                                       |
113| --------------------- | ---------------------------------------- |
114| Promise<number> | 指定的Promise回调方法。返回应用程序进入挂起状态之前的剩余时间,以毫秒为单位。 |
115
116**示例**:
117
118  ```js
119  let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
120  backgroundTaskManager.getRemainingDelayTime(delayInfo.requestId).then( res => {
121      console.log('promise => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
122  }).catch( err => {
123      console.log('promise => Operation getRemainingDelayTime failed. Cause: ' + err.code);
124  })
125  ```
126
127
128## backgroundTaskManager.cancelSuspendDelay
129
130cancelSuspendDelay(requestId: number): void
131
132取消延迟挂起。
133
134**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
135
136**参数**:
137
138| 参数名       | 类型     | 必填   | 说明         |
139| --------- | ------ | ---- | ---------- |
140| requestId | number | 是    | 延迟挂起的请求ID。这个值通过调用[requestSuspendDelay](#backgroundtaskmanagerrequestsuspenddelay)方法获取。 |
141
142**示例**:
143
144  ```js
145  let delayInfo = backgroundTaskManager.requestSuspendDelay("test", () => {});
146  backgroundTaskManager.cancelSuspendDelay(delayInfo.requestId);
147  ```
148
149
150## backgroundTaskManager.startBackgroundRunning<sup>8+</sup>
151
152startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent, callback: AsyncCallback&lt;void&gt;): void
153
154向系统申请长时任务,使用callback形式返回结果。
155
156**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
157
158**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
159
160**参数**:
161
162| 参数名       | 类型                                 | 必填   | 说明                                       |
163| --------- | ---------------------------------- | ---- | ---------------------------------------- |
164| context   | Context                            | 是    | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-context.md)。 |
165| bgMode    | [BackgroundMode](#backgroundmode8) | 是    | 向系统申请的后台模式。                              |
166| wantAgent | [WantAgent](js-apis-wantAgent.md)  | 是    | 通知参数,用于指定长时任务通知点击后跳转的界面。                 |
167| callback  | AsyncCallback&lt;void&gt;          | 是    | callback形式返回启动长时任务的结果。                   |
168
169**示例**:
170
171FA模型示例:
172
173```js
174import backgroundTaskManager from '@ohos.backgroundTaskManager';
175import featureAbility from '@ohos.ability.featureAbility';
176import wantAgent from '@ohos.wantAgent';
177
178function callback(err, data) {
179    if (err) {
180        console.error("Operation startBackgroundRunning failed Cause: " + err);
181    } else {
182        console.info("Operation startBackgroundRunning succeeded");
183    }
184}
185
186let wantAgentInfo = {
187    wants: [
188        {
189            bundleName: "com.example.myapplication",
190            abilityName: "com.example.myapplication.MainAbility"
191        }
192    ],
193    operationType: wantAgent.OperationType.START_ABILITY,
194    requestCode: 0,
195    wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
196};
197
198wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
199    backgroundTaskManager.startBackgroundRunning(featureAbility.getContext(),
200        backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj, callback)
201});
202
203```
204
205Stage模型示例:
206
207```ts
208import UIAbility from '@ohos.app.ability.UIAbility';
209import backgroundTaskManager from '@ohos.backgroundTaskManager';
210import wantAgent from '@ohos.app.ability.wantAgent';
211
212function callback(err, data) {
213    if (err) {
214        console.error("Operation startBackgroundRunning failed Cause: " + err);
215    } else {
216        console.info("Operation startBackgroundRunning succeeded");
217    }
218}
219
220export default class EntryAbility extends UIAbility {
221    onCreate(want, launchParam) {
222        let wantAgentInfo = {
223            wants: [
224                {
225                    bundleName: "com.example.myapplication",
226                    abilityName: "EntryAbility"
227                }
228            ],
229            operationType: wantAgent.OperationType.START_ABILITY,
230            requestCode: 0,
231            wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
232        };
233
234        wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
235            backgroundTaskManager.startBackgroundRunning(this.context,
236                backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj, callback)
237        });
238    }
239};
240```
241
242## backgroundTaskManager.startBackgroundRunning<sup>8+</sup>
243
244startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent): Promise&lt;void&gt;
245
246向系统申请长时任务,使用promise形式返回结果。
247
248**需要权限:** ohos.permission.KEEP_BACKGROUND_RUNNING
249
250**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
251
252**参数**:
253
254| 参数名       | 类型                                 | 必填   | 说明                                       |
255| --------- | ---------------------------------- | ---- | ---------------------------------------- |
256| context   | Context                            | 是    | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-context.md)。 |
257| bgMode    | [BackgroundMode](#backgroundmode8) | 是    | 向系统申请的后台模式。                              |
258| wantAgent | [WantAgent](js-apis-wantAgent.md)  | 是    | 通知参数,用于指定长时任务通知点击跳转的界面。                  |
259
260**返回值**:
261
262| 类型             | 说明               |
263| -------------- | ---------------- |
264| Promise\<void> | 使用Promise形式返回结果。 |
265
266**示例**:
267
268FA模型示例:
269
270```js
271import backgroundTaskManager from '@ohos.backgroundTaskManager';
272import featureAbility from '@ohos.ability.featureAbility';
273import wantAgent from '@ohos.wantAgent';
274
275let wantAgentInfo = {
276    wants: [
277        {
278            bundleName: "com.example.myapplication",
279            abilityName: "com.example.myapplication.MainAbility"
280        }
281    ],
282    operationType: wantAgent.OperationType.START_ABILITY,
283    requestCode: 0,
284    wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
285};
286
287wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
288    backgroundTaskManager.startBackgroundRunning(featureAbility.getContext(),
289        backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj).then(() => {
290        console.info("Operation startBackgroundRunning succeeded");
291    }).catch((err) => {
292        console.error("Operation startBackgroundRunning failed Cause: " + err);
293    });
294});
295```
296
297Stage模型示例:
298
299```ts
300import UIAbility from '@ohos.app.ability.UIAbility';
301import backgroundTaskManager from '@ohos.backgroundTaskManager';
302import wantAgent from '@ohos.app.ability.wantAgent';
303
304export default class EntryAbility extends UIAbility {
305    onCreate(want, launchParam) {
306        let wantAgentInfo = {
307            wants: [
308                {
309                    bundleName: "com.example.myapplication",
310                    abilityName: "EntryAbility"
311                }
312            ],
313            operationType: wantAgent.OperationType.START_ABILITY,
314            requestCode: 0,
315            wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
316        };
317
318        wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
319            backgroundTaskManager.startBackgroundRunning(this.context,
320                backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj).then(() => {
321                console.info("Operation startBackgroundRunning succeeded");
322            }).catch((err) => {
323                console.error("Operation startBackgroundRunning failed Cause: " + err);
324            });
325        });
326    }
327};
328```
329
330## backgroundTaskManager.stopBackgroundRunning<sup>8+</sup>
331
332stopBackgroundRunning(context: Context, callback: AsyncCallback&lt;void&gt;): void
333
334向系统申请取消长时任务,使用callback形式返回结果。
335
336**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
337
338**参数**:
339
340| 参数名      | 类型                        | 必填   | 说明                                       |
341| -------- | ------------------------- | ---- | ---------------------------------------- |
342| context  | Context                   | 是    | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-context.md)。 |
343| callback | AsyncCallback&lt;void&gt; | 是    | callback形式返回启动长时任务的结果。                   |
344
345**示例**:
346
347FA模型示例:
348
349```js
350import backgroundTaskManager from '@ohos.backgroundTaskManager';
351import featureAbility from '@ohos.ability.featureAbility';
352
353function callback(err, data) {
354    if (err) {
355        console.error("Operation stopBackgroundRunning failed Cause: " + err);
356    } else {
357        console.info("Operation stopBackgroundRunning succeeded");
358    }
359}
360
361backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext(), callback);
362
363```
364
365Stage模型示例:
366
367```ts
368import UIAbility from '@ohos.app.ability.UIAbility';
369import backgroundTaskManager from '@ohos.backgroundTaskManager';
370
371function callback(err, data) {
372    if (err) {
373        console.error("Operation stopBackgroundRunning failed Cause: " + err);
374    } else {
375        console.info("Operation stopBackgroundRunning succeeded");
376    }
377}
378
379export default class EntryAbility extends UIAbility {
380    onCreate(want, launchParam) {
381        backgroundTaskManager.stopBackgroundRunning(this.context, callback);
382    }
383};
384```
385
386## backgroundTaskManager.stopBackgroundRunning<sup>8+</sup>
387
388stopBackgroundRunning(context: Context): Promise&lt;void&gt;
389
390向系统申请取消长时任务,使用promise形式返回结果。
391
392**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
393
394**参数**:
395
396| 参数名     | 类型      | 必填   | 说明                                       |
397| ------- | ------- | ---- | ---------------------------------------- |
398| context | Context | 是    | 应用运行的上下文。<br>FA模型的应用Context定义见[Context](js-apis-inner-app-context.md)。<br>Stage模型的应用Context定义见[Context](js-apis-inner-application-context.md)。 |
399
400**返回值**:
401
402| 类型             | 说明               |
403| -------------- | ---------------- |
404| Promise\<void> | 使用Promise形式返回结果。 |
405
406**示例**:
407
408FA模型示例:
409
410```js
411import backgroundTaskManager from '@ohos.backgroundTaskManager';
412import featureAbility from '@ohos.ability.featureAbility';
413
414backgroundTaskManager.stopBackgroundRunning(featureAbility.getContext()).then(() => {
415    console.info("Operation stopBackgroundRunning succeeded");
416}).catch((err) => {
417    console.error("Operation stopBackgroundRunning failed Cause: " + err);
418});
419
420```
421
422Stage模型示例:
423
424```ts
425import UIAbility from '@ohos.app.ability.UIAbility';
426import backgroundTaskManager from '@ohos.backgroundTaskManager';
427
428export default class EntryAbility extends UIAbility {
429    onCreate(want, launchParam) {
430        backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
431            console.info("Operation stopBackgroundRunning succeeded");
432        }).catch((err) => {
433            console.error("Operation stopBackgroundRunning failed Cause: " + err);
434        });
435    }
436};
437```
438
439## DelaySuspendInfo
440
441延迟挂起信息。
442
443**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask
444
445| 名称             | 类型     | 必填   | 说明                                       |
446| --------------- | ------ | ---- | ---------------------------------------- |
447| requestId       | number | 是    | 延迟挂起的请求ID。                               |
448| actualDelayTime | number | 是    | 应用的实际挂起延迟时间,以毫秒为单位。<br/>一般情况下默认值为180000,低电量(依据系统低电量广播)时默认值为60000。 |
449
450
451## BackgroundMode<sup>8+</sup>
452
453**系统能力:** SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask
454
455| 名称                     | 值  | 说明                    |
456| ----------------------- | ---- | --------------------- |
457| DATA_TRANSFER           | 1    | 数据传输。                  |
458| AUDIO_PLAYBACK          | 2    | 音频播放。                  |
459| AUDIO_RECORDING         | 3    | 录音。                    |
460| LOCATION                | 4    | 定位导航。                  |
461| BLUETOOTH_INTERACTION   | 5    | 蓝牙相关。                  |
462| MULTI_DEVICE_CONNECTION | 6    | 多设备互联。                 |
463| WIFI_INTERACTION        | 7    | WLAN相关<br />此接口为系统接口。 |
464| VOIP                    | 8    | 音视频通话<br />此接口为系统接口。  |
465| TASK_KEEPING            | 9    | 计算任务(仅在特定设备生效)。        |
466