当应用退至后台时,开发者可以通过本模块接口为应用申请短时、长时任务,避免应用进程被终止或挂起。

👇🏻👇🏻👇🏻求关注👇🏻👇🏻👇🏻




导入模块

import ohos.background_task_mgr.*

func requestSuspendDelay(String, ()->Unit)

public func requestSuspendDelay(reason: String, callback: () -> Unit): DelaySuspendInfo

申请短时任务。

说明

短时任务的申请时间最长为3分钟,低电量时最长为1分钟。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

参数:

参数名

类型

必填

说明

reason

String

申请短时任务的原因。

callback

()->Unit

短时任务即将超时的回调函数,一般在超时前6秒,通过此回调通知应用。

返回值:

类型

说明

DelaySuspendInfo

返回短时任务信息。

错误码:

以下错误码的详细介绍请参见backgroundTaskManager错误码。

错误码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.

示例:



  • import ohos.background_task_mgr.*

  • let myReason = "test requestSuspendDelay"
  • try {
  •    let delayInfo = requestSuspendDelay(myReason, { =>
  •        AppLog.info("Request suspension delay will time out.")
  •    })
  •    let id = delayInfo.requestId
  •    let time = delayInfo.actualDelayTime
  •    AppLog.info("The requestId is: ${id}")
  •    AppLog.info("The actualDelayTime is: ${time}")
  • } catch (e: BusinessException) {
  •    AppLog.info(`requestSuspendDelay failed. code is ${e.code} mes        sage is ${e.message}`)
  • }


func getRemainingDelayTime(Int32)

  • public func getRemainingDelayTime(requestId: Int32): Int32

获取本次短时任务的剩余时间。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

参数:

参数名

类型

必填

说明

requestId

Int32

短时任务的请求ID。

返回值:

类型

说明

Int32

返回本次短时任务的剩余时间,单位为毫秒。

错误码:

以下错误码的详细介绍请参见backgroundTaskManager错误码。

错误码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.

示例:



  • import ohos.background_task_mgr.*

  • let id = 1
  • try {
  •        let time = getRemainingDelayTime(id)
  •        AppLog.info("getRemainingDelayTime succeeded. Data: ${time}")
  • } catch (e: BusinessException) {
  •    AppLog.info("getRemainingDelayTime failed. code is ${e.code}             message is ${e.message}")
  • }


func cancelSuspendDelay(Int32)

public func cancelSuspendDelay(requestId: Int32): Unit

取消短时任务。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

参数:

参数名

类型

必填

说明

requestId

Int32

短时任务的请求ID。

错误码:

以下错误码的详细介绍请参见backgroundTaskManager错误码。

错误码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.

示例:



  • import ohos.background_task_mgr.*

  • let id = 1
  • try {
  •    cancelSuspendDelay(id)
  • } catch (e: BusinessException) {
  •    AppLog.info("cancelSuspendDelay failed. code is ${e.code} message is ${e.message}")
  • }


func stopBackgroundRunning(StageContext)

public func stopBackgroundRunning(context: StageContext): Unit

向系统申请取消长时任务。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

参数:

参数名

类型

必填

说明

context

StageContext

应用运行的上下文。

示例:



  • import ohos.base.*
  • import ohos.ability.*
  • import ohos.background_task_mgr.*

  • try {
  •    let stageContext = getStageContext(getContext())
  •    stopBackgroundRunning(stageContext)
  • } catch (e: BusinessException) {
  •    AppLog.info("cancelSuspendDelay failed. code is ${e.code} message is ${e.message}")
  • }


func applyEfficiencyResources(EfficiencyResourcesRequest)

public func applyEfficiencyResources(request: EfficiencyResourcesRequest): Unit

申请能效资源。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply

系统API: 此接口为系统接口。

参数:

参数名

类型

必填

说明

request

EfficiencyResourcesRequest

请求的必要信息,包括资源类型、超时时间等。

错误码:

以下错误码的详细介绍请参见backgroundTaskManager错误码。

错误码ID

错误信息

9800001

Memory operation failed.

9800002

Parcel operation failed.

9800003

Inner transact failed.

9800004

System service operation failed.

18700001

Caller information verification failed.

示例:




  • import ohos.background_task_mgr.*

  • try {
  •    let req = EfficiencyResourcesRequest(UInt32(ResourceType.CPU.getValue()), true, 0, "apply", isPersist: true)
  •    applyEfficiencyResources(req)
  • } catch (e: BusinessException) {
  •    AppLog.info("cancelSuspendDelay failed. code is ${e.code} message is ${e.message}")
  • }





class DelaySuspendInfo



  • public class DelaySuspendInfo {
  •    public DelaySuspendInfo(
  •        public let requestId: Int32,
  •        public let actualDelayTime: Int32
  •    ) {}
  • }





短时任务信息。

系统能力:SystemCapability.ResourceSchedule.BackgroundTaskManager.TransientTask

名称

类型

必填

说明

requestId

Int32

短时任务的请求ID。

actualDelayTime

Int32

应用实际申请的短时任务时间,单位为毫秒。短时任务申请时间最长为3分钟,低电量时最长为1分钟。

class EfficiencyResourcesRequest



  • public class EfficiencyResourcesRequest {
  •    public EfficiencyResourcesRequest(
  •        public let resourceTypes: UInt32,
  •        public let isApply: Bool,
  •        public let timeOut: UInt32,
  •        public let reason: String,
  •        public let isPersist!: Bool = false,
  •        public let isProcess!: Bool = false
  •    ) {}
  • }




能效资源申请参数。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply

系统API: 此接口为系统接口。

名称

类型

必填

说明

resourceTypes

UInt32

申请的资源类型。

isApply

Bool

申请或释放资源。

- true表示申请资源。

- false表示释放部分资源。

timeOut

UInt32

资源使用时间,单位为毫秒。

isPersist

Bool

是否永久持有资源,默认为false。

- true表示永久持有。

- false表示有限时间内持有。

isProcess

Bool

进程或应用申请,默认为false。

- true表示进程申请。

- false表示应用申请。

reason

String

申请资源原因。

enum BackgroundMode



  • public enum BackgroundMode {
  •    | DATA_TRANSFER
  •    | AUDIO_PLAYBACK
  •    | AUDIO_RECORDING
  •    | LOCATION
  •    | BLUETOOTH_INTERACTION
  •    | MULTI_DEVICE_CONNECTION
  •    | WIFI_INTERACTION
  •    | VOIP
  •    | TASK_KEEPING
  • }




长时任务模式。

系统能力:SystemCapability.ResourceSchedule.BackgroundTaskManager.ContinuousTask

名称

说明

DATA_TRANSFER

数据传输。

AUDIO_PLAYBACK

音频播放。

AUDIO_RECORDING

录音。

LOCATION

定位导航。

BLUETOOTH_INTERACTION

蓝牙相关。

MULTI_DEVICE_CONNECTION

多设备互联。

WIFI_INTERACTION

WLAN相关。

系统API:此接口为系统接口。

VOIP

音视频通话。

系统API:此接口为系统接口。

TASK_KEEPING

计算任务(仅对特定设备开放)。

enum ResourceType



  • public enum ResourceType {
  •    | CPU
  •    | COMMON_EVENT
  •    | TIMER
  •    | WORK_SCHEDULER
  •    | BLUETOOTH
  •    | GPS
  •    | AUDIO
  •    | RUNNING_LOCK
  •    | SENSOR
  • }


能效资源类型。

系统能力: SystemCapability.ResourceSchedule.BackgroundTaskManager.EfficiencyResourcesApply

系统API: 此接口为系统接口。

名称

说明

CPU

1

CPU资源,申请后应用进程不被挂起。

COMMON_EVENT

2

公共事件资源,申请后应用进程被挂起后,可以收到公共事件。

TIMER

4

计时器,申请后应用进程被挂起后,Timer仍然可以唤醒应用。

WORK_SCHEDULER

8

延迟任务资源,申请后延迟任务管控变宽松。

BLUETOOTH

16

蓝牙资源,申请后应用进程被挂起后,蓝牙相关事件仍然可以唤醒应用。

GPS

32

GPS资源,申请后应用进程被挂起后,GPS相关事件可以唤醒应用。

AUDIO

64

音频资源,有音频播放时对应的应用进程不被挂起。

RUNNING_LOCK

128

RUNNING_LOCK资源,申请后挂起状态不会代理RUNNING_BACKGROUND锁。

SENSOR

256

申请后不拦截Sensor回调。

func getValue()

public func getValue(): Int32

获取ResourceType枚举类型对应的整数值。

返回值:

类型

说明

Int32

ResourceType枚举类型对应的整数值。

示例:



  • import ohos.background_task_mgr.*

  • let value: Int32 = ResourceType.CPU.getValue()


如对您有帮助,帮忙点个“在看 、关注” 让更多的人受益~!