后臺任務(wù)管理

2024-01-23 15:53 更新

本模塊提供后臺任務(wù)管理能力。

當(dāng)應(yīng)用或業(yè)務(wù)模塊處于后臺(無可見界面)時,如果有需要繼續(xù)執(zhí)行或者后續(xù)執(zhí)行的業(yè)務(wù),可基于業(yè)務(wù)類型,申請短時任務(wù)延遲掛起(Suspend)或者長時任務(wù)避免進(jìn)入掛起狀態(tài)。

應(yīng)用有不可中斷且短時間能完成的任務(wù)時(如,用戶在文件管理器上點擊垃圾文件清理,若清理未完成時退到后臺,文件管理器需要申請短時任務(wù)完成清理),可以使用短時任務(wù)機(jī)制。

應(yīng)用中存在用戶能夠直觀感受到的且需要一直在后臺運行的業(yè)務(wù)時(如,后臺播放音樂),可以使用長時任務(wù)機(jī)制。

對于系統(tǒng)特權(quán)應(yīng)用,提供獨立的能效資源申請接口。系統(tǒng)特權(quán)應(yīng)用如果需要使用特定的系統(tǒng)資源,例如在被掛起期間仍然能夠收到系統(tǒng)公共事件,可以使用能效資源申請接口。

說明
  • 本模塊首批接口從API version 9開始支持。后續(xù)版本的新增接口,采用上角標(biāo)單獨標(biāo)記接口的起始版本。

導(dǎo)入模塊

  1. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';

backgroundTaskManager.requestSuspendDelay

requestSuspendDelay(reason: string, callback: Callback<void>): DelaySuspendInfo

后臺應(yīng)用申請延遲掛起。

延遲掛起時間一般情況下默認(rèn)值為3分鐘,低電量(依據(jù)系統(tǒng)低電量廣播)時默認(rèn)值為1分鐘。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

參數(shù)

參數(shù)名

類型

必填

說明

reason

string

延遲掛起申請的原因。

callback

Callback<void>

延遲即將超時的回調(diào)函數(shù),一般在超時前6秒通過此回調(diào)通知應(yīng)用。

返回值

類型

說明

DelaySuspendInfo

返回延遲掛起信息。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9900001

Caller information verification failed.

9900002

Background task verification failed.

示例

  1. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  2. let myReason = 'test requestSuspendDelay';
  3. try {
  4. let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, () => {
  5. console.info("Request suspension delay will time out.");
  6. })
  7. var id = delayInfo.requestId;
  8. var time = delayInfo.actualDelayTime;
  9. console.info("The requestId is: " + id);
  10. console.info("The actualDelayTime is: " + time);
  11. } catch (error) {
  12. console.error(`requestSuspendDelay failed. code is ${error.code} message is ${error.message}`);
  13. }

backgroundTaskManager.getRemainingDelayTime

getRemainingDelayTime(requestId: number, callback: AsyncCallback<number>): void

獲取應(yīng)用程序進(jìn)入掛起狀態(tài)前的剩余時間,使用callback形式返回。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

參數(shù)

參數(shù)名

類型

必填

說明

requestId

number

延遲掛起的請求ID。

callback

AsyncCallback<number>

指定的callback回調(diào)方法。用于返回應(yīng)用程序進(jìn)入掛起狀態(tài)之前的剩余時間,以毫秒為單位。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9900001

Caller information verification failed.

9900002

Background task verification failed.

示例

  1. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  2. let id = 1;
  3. try {
  4. backgroundTaskManager.getRemainingDelayTime(id, (error, res) => {
  5. if(error) {
  6. console.error(`callback => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
  7. } else {
  8. console.log('callback => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
  9. }
  10. })
  11. } catch (error) {
  12. console.error(`callback => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
  13. }

backgroundTaskManager.getRemainingDelayTime

getRemainingDelayTime(requestId: number): Promise<number>

獲取應(yīng)用程序進(jìn)入掛起狀態(tài)前的剩余時間,使用Promise形式返回。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

參數(shù)

參數(shù)名

類型

必填

說明

requestId

number

延遲掛起的請求ID。

返回值

類型

說明

Promise<number>

指定的Promise回調(diào)方法。返回應(yīng)用程序進(jìn)入掛起狀態(tài)之前的剩余時間,以毫秒為單位。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9900001

Caller information verification failed.

9900002

Background task verification failed.

示例

  1. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  2. let id = 1;
  3. try {
  4. backgroundTaskManager.getRemainingDelayTime(id).then( res => {
  5. console.log('promise => Operation getRemainingDelayTime succeeded. Data: ' + JSON.stringify(res));
  6. }).catch( error => {
  7. console.error(`promise => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
  8. })
  9. } catch (error) {
  10. console.error(`promise => Operation getRemainingDelayTime failed. code is ${error.code} message is ${error.message}`);
  11. }

backgroundTaskManager.cancelSuspendDelay

cancelSuspendDelay(requestId: number): void

取消延遲掛起。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

參數(shù)

參數(shù)名

類型

必填

說明

requestId

number

延遲掛起的請求ID。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9900001

Caller information verification failed.

9900002

Background task verification failed.

示例

  1. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  2. let id = 1;
  3. try {
  4. backgroundTaskManager.cancelSuspendDelay(id);
  5. } catch (error) {
  6. console.error(`cancelSuspendDelay failed. code is ${error.code} message is ${error.message}`);
  7. }

backgroundTaskManager.startBackgroundRunning

startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent, callback: AsyncCallback<void>): void

向系統(tǒng)申請長時任務(wù),使用callback形式返回結(jié)果。

需要權(quán)限: ohos.permission.KEEP_BACKGROUND_RUNNING

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

參數(shù)

參數(shù)名

類型

必填

說明

context

Context

應(yīng)用運行的上下文。

FA模型的應(yīng)用Context定義見Context

Stage模型的應(yīng)用Context定義見Context。

bgMode

BackgroundMode

向系統(tǒng)申請的后臺模式。

wantAgent

WantAgent

通知參數(shù),用于指定長時任務(wù)通知點擊后跳轉(zhuǎn)的界面。

callback

AsyncCallback<void>

callback形式返回啟動長時任務(wù)的結(jié)果。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9800005

Background task verification failed.

9800006

Notification verification failed.

9800007

Task storage failed.

示例

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  3. import wantAgent from '@ohos.app.ability.wantAgent';
  4. function callback(error, data) {
  5. if (error) {
  6. console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  7. } else {
  8. console.info("Operation startBackgroundRunning succeeded");
  9. }
  10. }
  11. export default class EntryAbility extends UIAbility {
  12. onCreate(want, launchParam) {
  13. let wantAgentInfo = {
  14. wants: [
  15. {
  16. bundleName: "com.example.myapplication",
  17. abilityName: "EntryAbility"
  18. }
  19. ],
  20. operationType: wantAgent.OperationType.START_ABILITY,
  21. requestCode: 0,
  22. wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
  23. };
  24. try {
  25. wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
  26. try {
  27. backgroundTaskManager.startBackgroundRunning(this.context,
  28. backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj, callback)
  29. } catch (error) {
  30. console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  31. }
  32. });
  33. } catch (error) {
  34. console.error(`Operation getWantAgent failed. code is ${error.code} message is ${error.message}`);
  35. }
  36. }
  37. };

backgroundTaskManager.startBackgroundRunning

startBackgroundRunning(context: Context, bgMode: BackgroundMode, wantAgent: WantAgent): Promise<void>

向系統(tǒng)申請長時任務(wù),使用promise形式返回結(jié)果。

需要權(quán)限: ohos.permission.KEEP_BACKGROUND_RUNNING

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

參數(shù)

參數(shù)名

類型

必填

說明

context

Context

應(yīng)用運行的上下文。

FA模型的應(yīng)用Context定義見Context

Stage模型的應(yīng)用Context定義見Context。

bgMode

BackgroundMode

向系統(tǒng)申請的后臺模式。

wantAgent

WantAgent

通知參數(shù),用于指定長時任務(wù)通知點擊跳轉(zhuǎn)的界面。

返回值

類型

說明

Promise<void>

使用Promise形式返回結(jié)果。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9800005

Background task verification failed.

9800006

Notification verification failed.

9800007

Task storage failed.

示例

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  3. import wantAgent from '@ohos.app.ability.wantAgent';
  4. export default class EntryAbility extends UIAbility {
  5. onCreate(want, launchParam) {
  6. let wantAgentInfo = {
  7. wants: [
  8. {
  9. bundleName: "com.example.myapplication",
  10. abilityName: "EntryAbility"
  11. }
  12. ],
  13. operationType: wantAgent.OperationType.START_ABILITY,
  14. requestCode: 0,
  15. wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
  16. };
  17. try {
  18. wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
  19. try {
  20. backgroundTaskManager.startBackgroundRunning(this.context,
  21. backgroundTaskManager.BackgroundMode.LOCATION, wantAgentObj).then(() => {
  22. console.info("Operation startBackgroundRunning succeeded");
  23. }).catch((error) => {
  24. console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  25. });
  26. } catch (error) {
  27. console.error(`Operation startBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  28. }
  29. });
  30. } catch (error) {
  31. console.error(`Operation getWantAgent failed. code is ${error.code} message is ${error.message}`);
  32. }
  33. }
  34. };

backgroundTaskManager.stopBackgroundRunning

stopBackgroundRunning(context: Context, callback: AsyncCallback<void>): void

向系統(tǒng)申請取消長時任務(wù),使用callback形式返回結(jié)果。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

參數(shù)

參數(shù)名

類型

必填

說明

context

Context

應(yīng)用運行的上下文。

FA模型的應(yīng)用Context定義見Context。

Stage模型的應(yīng)用Context定義見Context

callback

AsyncCallback<void>

callback形式返回啟動長時任務(wù)的結(jié)果。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9800005

Background task verification failed.

9800006

Notification verification failed.

9800007

Task storage failed.

示例

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  3. function callback(error, data) {
  4. if (error) {
  5. console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  6. } else {
  7. console.info("Operation stopBackgroundRunning succeeded");
  8. }
  9. }
  10. export default class EntryAbility extends UIAbility {
  11. onCreate(want, launchParam) {
  12. try {
  13. backgroundTaskManager.stopBackgroundRunning(this.context, callback);
  14. } catch (error) {
  15. console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  16. }
  17. }
  18. };

backgroundTaskManager.stopBackgroundRunning

stopBackgroundRunning(context: Context): Promise<void>

向系統(tǒng)申請取消長時任務(wù),使用promise形式返回結(jié)果。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

參數(shù)

參數(shù)名

類型

必填

說明

context

Context

應(yīng)用運行的上下文。

FA模型的應(yīng)用Context定義見Context。

Stage模型的應(yīng)用Context定義見Context。

返回值

類型

說明

Promise<void>

使用Promise形式返回結(jié)果。

錯誤碼

以下錯誤碼的詳細(xì)介紹請參見@ohos.resourceschedule.backgroundTaskManager (后臺任務(wù)管理)錯誤碼。

錯誤碼ID

錯誤信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

9800005

Background task verification failed.

9800006

Notification verification failed.

9800007

Task storage failed.

示例

  1. import UIAbility from '@ohos.app.ability.UIAbility';
  2. import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
  3. export default class EntryAbility extends UIAbility {
  4. onCreate(want, launchParam) {
  5. try {
  6. backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
  7. console.info("Operation stopBackgroundRunning succeeded");
  8. }).catch((error) => {
  9. console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  10. });
  11. } catch (error) {
  12. console.error(`Operation stopBackgroundRunning failed. code is ${error.code} message is ${error.message}`);
  13. }
  14. }
  15. };

DelaySuspendInfo

延遲掛起信息。

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

名稱

類型

必填

說明

requestId

number

延遲掛起的請求ID。

actualDelayTime

number

應(yīng)用的實際掛起延遲時間,以毫秒為單位。

一般情況下默認(rèn)值為180000,低電量(依據(jù)系統(tǒng)低電量廣播)時默認(rèn)值為60000。

BackgroundMode

系統(tǒng)能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

名稱

說明

DATA_TRANSFER

1

數(shù)據(jù)傳輸。

AUDIO_PLAYBACK

2

音頻播放。

AUDIO_RECORDING

3

錄音。

LOCATION

4

定位導(dǎo)航。

BLUETOOTH_INTERACTION

5

藍(lán)牙相關(guān)。

MULTI_DEVICE_CONNECTION

6

多設(shè)備互聯(lián)。

TASK_KEEPING

9

計算任務(wù)(僅對特定設(shè)備生效)。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號