首页 > 其他分享 >鸿蒙原生应用/元服务开发-短时任务

鸿蒙原生应用/元服务开发-短时任务

时间:2023-12-28 16:34:21浏览次数:46  
标签:原生 剩余时间 backgroundTaskManager 鸿蒙 申请 任务 短时 应用

概述
应用退至后台一小段时间后,应用进程会被挂起,无法执行对应的任务。如果应用在后台仍需要执行耗时不长的任务,如状态保存等,可以通过本文申请短时任务,扩展应用在后台的运行时间。

约束与限制

·申请时机:应用需要在前台或退至后台5秒内,申请短时任务,否则会申请失败。

·数量限制:一个应用同一时刻最多申请3个短时任务。以图1为例,①②③时间段内的任意时刻应用申请2个短时任务,④时间段内的任意时刻应用申请1个短时任务。

·配额机制:一个应用会有一定的短时任务配额(根据系统状态和用户习惯调整),单日(24小时内)配额默认为10分钟,单次配额最大为3分钟,低电量时默认为1分钟,配额消耗完后不允许再申请短时任务。同时,系统提供获取对应短时任务剩余时间的查询接口,用以查询本次短时任务剩余时间,以确认是否继续运行其他业务。

·配额计算:仅当应用在后台时,对应用下的短时任务计时;同一个应用下的同一个时间段的短时任务,不重复计时。

以下图为例:应用有两个短时任务A和B,在前台时申请短时任务A,应用退至后台后开始计时为①,应用进入前台后②不计时,再次进入后台后③开始计时,短时任务A结束后,由于阶段④仍然有短时任务B,所以该阶段继续计时。因此,在这个过程中,该应用短时任务总耗时为①+③+④。

图1 短时任务配额计算原理图

鸿蒙原生应用/元服务开发-短时任务_时间段

·超时:短时任务即将超时时,系统会回调应用,应用需要取消短时任务。如果超时不取消,系统会终止对应的应用进程。

接口说明

鸿蒙原生应用/元服务开发-短时任务_时间段_02


代码开发:

1.导入模块

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

2.申请短时任务并实现回调

et id; // 申请短时任务ID

let delayTime; // 本次申请短时任务的剩余时间

// 申请短时任务

function requestSuspendDelay() {

let myReason = 'test requestSuspendDelay'; // 申请原因

let delayInfo = backgroundTaskManager.requestSuspendDelay(myReason, ()=> {

// 回调函数。应用申请的短时任务即将超时,通过此函数回调应用,行一些清理和标注工作,并取消短时任务

console.info('Succeeded in requesting suspend delay.');

backgroundTaskManager.cancelSuspendDelay(id);

})

id = delayInfo.requestId;

delayTime = delayInfo.actualDelayTime;

}

3.获取短时任务剩余时间。查询本次短时任务的剩余时间,用以判断是否继续运行其他业务,例如应用有两个小任务,在执行完第一个小任务后,可以判断本次短时任务是否还有剩余时间来决定是否执行第二个小任务。

async function getRemainingDelayTime() {

  backgroundTaskManager.getRemainingDelayTime(id).then(res => {

    delayTime = res;

    console.info('Succeeded in getting remaining delay time.');

  }).catch(err => {

    console.error(`Failed to get remaining delay time. Code: ${err.code}, message: ${err.message}`);

  })

}

4.取消短时任务

function cancelSuspendDelay() {

  backgroundTaskManager.cancelSuspendDelay(id);

}


标签:原生,剩余时间,backgroundTaskManager,鸿蒙,申请,任务,短时,应用
From: https://blog.51cto.com/u_14946066/9016287

相关文章

  • flutter IOS 原生交互同一个插件多个方法调用
    由于代码比价简单直接上代码ios/Runner/AppDelegate.swiftimportUIKitimportFlutter@UIApplicationMain@objcclassAppDelegate:FlutterAppDelegate{overridefuncapplication(_application:UIApplication,didFinishLaunchingWithOptionslaunchOption......
  • 鸿蒙原生应用再添新丁!米哈游入局鸿蒙
    鸿蒙原生应用再添新丁!米哈游入局鸿蒙来自@HarmonyOS 微博12月18日消息,!#米哈游宣布启动鸿蒙原生应用开发#,当“技术宅拯救世界”的@米哈游miHoYo@原神遇上#HarmonyOSNEXT#,将为跨平台的游戏玩法和玩家体验带来更多可能。#鸿蒙千帆起# ##HarmonyOS#市场或迎来爆发式增!学习鸿蒙正......
  • flutter 添加原生IOS 播放器
    定义播放器FlutterAVPlayer.swiftimportFoundationimportAVKitimportMediaPlayerimportFlutterclassFlutterAVPlayer:NSObject,FlutterPlatformView{privatevar_flutterAVPlayerViewController:AVPlayerViewController;init(frame:CGRect,......
  • 云原生场景下月省 10 万元资源成本,这家企业做对了什么
    作者:行疾相信近期从事基础设施工作的各位,对IT成本治理,以及FinOps体系的概念已经有了一些认知。在Google近5年的热度趋势中,FinOps的趋势也在持续上升。在阿里云的同学与客户实际工作协同中,我们发现成本治理是几乎每位客户都存在的普适需求,特别是各位技术管理者重要的关......
  • 云原生场景下月省 10 万元资源成本,这家企业做对了什么
    作者:行疾相信近期从事基础设施工作的各位,对IT成本治理,以及FinOps体系的概念已经有了一些认知。在Google近5年的热度趋势中,FinOps的趋势也在持续上升。在阿里云的同学与客户实际工作协同中,我们发现成本治理是几乎每位客户都存在的普适需求,特别是各位技术管理者重要的关注点......
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件
    鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Row组件一、操作环境操作系统: Windows10专业版、IDE:DevEcoStudio3.1、SDK:HarmonyOS3.1二、Row组件沿水平方向布局容器。子组件可以包含子组件。接口Row(value?:{space?:string|number})参数参数名参数类型必填默认值参数......
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件
    鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之线性布局容器Column组件一、操作环境操作系统: Windows10专业版、IDE:DevEcoStudio3.1、SDK:HarmonyOS3.1二、Column组件沿垂直方向布局的容器。子组件可以包含子组件。接口Column(value?:{space?:string|number})参数参数名参数类型必......
  • 原生js和jquery判断单选复选框是否选中
    用jquery判断设置单选复选框时,有时会有些迷糊,今天总结下。<dl><dt>单选框</dt><dd><label><inputtype="radio"name="gender"value="男"/>男</label><label><inputtype="radio"name=......
  • 写给开发者的软件架构实战:容器化与云原生架构
    1.背景介绍容器化与云原生架构是当今最热门的技术趋势之一,它们为开发者提供了一种更加高效、灵活和可扩展的软件开发和部署方法。在这篇文章中,我们将深入探讨容器化与云原生架构的核心概念、算法原理、实例代码和未来趋势。1.1容器化与云原生的出现容器化与云原生技术的出现,主要是......
  • 测试开发 | 长短时记忆网络(LSTM):时序信息的记忆大师
    在深度学习领域,长短时记忆网络(LongShort-TermMemory,简称LSTM)被广泛应用于处理时序数据,尤其是解决传统循环神经网络(RNN)中梯度消失和梯度爆炸的问题。LSTM的独特结构使其能够有效地捕捉和利用序列中的长期依赖关系,从而在自然语言处理、语音识别、时间序列分析等任务中取得了显著的......