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

news2024/11/16 4:51:35

概述
功能介绍
应用退至后台后,对于在后台需要长时间运行用户可感知的任务,例如播放音乐、导航等。为防止应用进程被挂起,导致对应功能异常,可以申请长时任务,使应用在后台长时间运行。申请长时任务后,系统会做相应的校验,确保应用在执行相应的长时任务。同时,系统有与长时任务相关联的通知栏消息,用户删除通知栏消息时,系统会自动停止长时任务。

使用场景
下表给出了当前长时任务支持的类型,包含数据传输、音频播放、录音、定位导航、蓝牙相关、多设备互联和计算任务。可以参考下表中的场景举例,选择合适的长时任务类型。

 长时任务类型
 

鸿蒙原生应用/元服务开发-长时任务-鸿蒙开发者社区


·申请了DATA_TRANSFER(数据传输)的长时任务,系统仅会提升应用进程的优先级,降低系统终止应用进程的概率,但仍然会挂起对应的应用进程。对于上传下载对应的功能,需要调用系统上传下载代理接口托管给系统执行。

约束与限制
申请限制:Stage模型中,长时任务仅支持UIAbility申请;FA模型中,长时任务仅支持ServiceAbility申请。
数量限制:一个UIAbility(FA模型则为ServiceAbility)同一时刻仅支持申请一个长时任务,即在一个长时任务结束后才可能继续申请。如果一个应用同时需要申请多个长时任务,需要创建多个UIAbility;一个应用的一个UIAbility申请长时任务后,整个应用下的所有进程均不会被挂起。
运行限制:系统会进行长时任务校验。若应用申请了长时任务,但未真正执行申请类型的长时任务或申请类型的任务已结束,系统会对应用进行管控。例如系统检测到应用申请了AUDIO_PLAYBACK(音频播放),但实际未播放音乐,系统则会终止对应的进程。
接口说明:
主要接口:
 

鸿蒙原生应用/元服务开发-长时任务-鸿蒙开发者社区


代码开发:stage模型下
1.申请ohos.permission.KEEP_BACKGROUND_RUNNING权限,配置方式请参见配置文件权限声明。
2.声明后台模式类型。
在module.json5配置文件中为需要使用长时任务的UIAbility声明相应的长时任务类型。

 {
  "module": {
    ...
    "abilities": [
      {
        ...
        // 后台模式类型
        "backgroundModes": [
          "audioRecording"
        ],
      }
    ]
  }
}

3.导入模块

import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';
import wantAgent from '@ohos.app.ability.wantAgent';

4.申请和取消长时任务。
设备本应用申请长时任务示例代码如下:

import common from '@ohos.app.ability.common';

@Entry
@Component
struct Index {
  @State message: string = 'ContinuousTask';
  // 获取UIAbilityContext
  private context = getContext(this) as common.UIAbilityContext;
  startContinuousTask() {
    let wantAgentInfo = {
      // 点击通知后,将要执行的动作列表
      wants: [
        {
          bundleName: "com.example.myapplication",
          abilityName: "EntryAbility"
        }
],
// 点击通知后,动作类型
operationType: wantAgent.OperationType.START_ABILITY,
// 使用者自定义的一个私有值
requestCode: 0,
// 点击通知后,动作执行属性
wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
};

// 通过wantAgent模块下getWantAgent方法获取WantAgent对象
wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj) => {
  try {
    backgroundTaskManager.startBackgroundRunning(this.context,
      backgroundTaskManager.BackgroundMode.AUDIO_RECORDING, wantAgentObj).then(() => {
      console.info(`Succeeded in operationing startBackgroundRunning.`);
    }).catch((err) => {
      console.error(`Failed to operation startBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
    });
  } catch (error) {
    console.error(`Failed to start background running. Code is ${error.code} message is ${error.message}`);
  }
});
}

stopContinuousTask() {
  try {
    backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {
      console.info(`Succeeded in operationing stopBackgroundRunning.`);
    }).catch((err) => {
      console.error(`Failed to operation stopBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
    });
  } catch (error) {
    console.error(`Failed to stop background running. Code is ${error.code} message is ${error.message}`);
  }
}

build() {
    Row() {
      Column() {
        Text("Index")
          .fontSize(50)
          .fontWeight(FontWeight.Bold)

        Button() {
          Text('申请长时任务').fontSize(25).fontWeight(FontWeight.Bold)
        }
.type(ButtonType.Capsule)
  .margin({ top: 10 })
  .backgroundColor('#0D9FFB')
  .width(250)
  .height(40)
  .onClick(() => {
    // 通过按钮申请长时任务
    this.startContinuousTask();

    // 此处执行具体的长时任务逻辑,如放音等。
  })

Button() {
  Text('取消长时任务').fontSize(25).fontWeight(FontWeight.Bold)
}
.type(ButtonType.Capsule)
  .margin({ top: 10 })
  .backgroundColor('#0D9FFB')
  .width(250)
  .height(40)
  .onClick(() => {
    // 此处结束具体的长时任务的执行

    // 通过按钮取消长时任务
    this.stopContinuousTask();
  })
}
.width('100%')
}
.height('100%')
}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1376873.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

电脑弹窗“concrt140.dll文件找不到”,快速修复,亲测有效

很多小伙伴,在启动游戏或软件的时候,电脑会弹出错误提示框称““concrt140.dll文件找不到,程序无法运行”,不清楚是怎么回事,应该怎么办? 首先,我们先来了解““concrt140.dll文件找”是什么&a…

【AI视野·今日Robot 机器人论文速览 第七十四期】Wed, 10 Jan 2024

AI视野今日CS.Robotics 机器人学论文速览 Wed, 10 Jan 2024 Totally 17 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Hold em and Fold em: Towards Human-scale, Feedback-Controlled Soft Origami Robots Authors Immanuel Ampomah Mensah, Je…

【前后端的那些事】前后端环境搭建+树形结构表格实现

文章目录 1. 前后端项目环境搭建2. table-tree2.1 后端准备2.2 前端准备 前言:最近写项目,发现了一些很有意思的功能,想写文章,录视频把这些内容记录下。但这些功能太零碎,如果为每个功能都单独搭建一个项目&#xff0…

【贪心】一手顺子

/** 贪心:将一个数当成一个组中最小的数,在根据该最小数找其它数。* 思路:将hand进行分组,假设hand长度为 n,必须n % groupSize 0才可以分组,否则返回false,* 使用哈希表记录每个数出现…

考研经验总结——目录

文章目录 一、写作顺序二、个人情况说明三、读评论四、一些小牢骚 一、写作顺序 我将准备从三个阶段开始介绍吧 考研前考研中考研后(也就是现在我的这种情况) 考研前我会分为:数学、专业课、政治、英语 四个部分来写 我应该会涉及&#xf…

AI赋能建筑设计 | VERYCLOUD睿鸿股份与亚马逊云科技协力为AIRI lab. 打造生成式AI应用案例

近年来,很多研究都致力于探索如何让建筑师借助人工智能的力量来促进并简化设计流程。生成式AI全球爆火以来,建筑设计领域也掀起了一场全新的思维变革。 AI为建筑设计带来更多可能 作为一家面向全球提供设计服务的企业,AIRI lab.计划推出一种…

Python教程41:使用turtle画蜡笔小新

---------------turtle源码集合--------------- Python教程39:使用turtle画美国队长盾牌 Python教程38:使用turtle画动态粒子爱心文字爱心 Python教程37:使用turtle画一个戴帽子的皮卡丘 Python教程36:海龟画图turtle写春联 …

【pytorch】使用pytorch构建线性回归模型-了解计算图和自动梯度

使用pytorch构建线性回归模型 线性方程的一般形式 衡量线性损失的一般形式-均方误差 pytorch中计算图的作用和优势 在 PyTorch 中,计算图(Computational Graph)是一种用于表示神经网络运算的数据结构。每个节点代表一个操作,例如…

【AWS】使用亚马逊云服务器创建EC2实例

目录 前言为什么选择 Amazon EC2 云服务器搭建 Amazon EC2 云服务器注册亚马逊账号登录控制台服务器配置免费套餐预览使用 Amazon EC2 云服务器打开服务器管理界面设置服务器区域填写实例名称选择服务器系统镜像选择实例类型创建密钥对网络设置配置存储启动实例查看实例 总结 前…

【天龙怀旧服】攻略day5

关键字: 天鉴扫荡、举贤、燕子水路 1】85天鉴任务可以扫荡 在流派选择npc那里,花费40交子即可扫荡100点,可以兑换10个灵武打造图; 此外打造图绑定不影响做出来的灵武绑定,只要对应的玉不绑灵武就不绑定 2】冠绝师门…

C#使用CryptoStream类加密和解密字符串

目录 一、CrytoStream的加密方法 二、CrytoStream的解密方法 三、实例 1.源码Form1.cs 2.类库Encrypt.cs 3.生成效果 在使用CryptoStream前要先引用命名空间using System.Security.Cryptography。 一、CrytoStream的加密方法 记住,不能再使用DESCryptoServi…

宏集案例丨宏集PC Runtime软件助推食品行业生产线数字化革新

来源:宏集科技 工业物联网 宏集案例丨宏集PC Runtime软件助推食品行业生产线数字化革新 原文链接:https://mp.weixin.qq.com/s/DwzVzifUiidNr-FT3Zfzpg 欢迎关注虹科,为您提供最新资讯! 01 前言 近年来,中国食品行业…

深入浅出Android dmabuf_dump工具

目录 dmabuf是什么? dmabuf_dump工具介绍(基于Android 14) Android.bp dmabuf_dump.cpp 整体架构结构如下 dmabuf_dump主要包含以下功能 前置背景知识 fdinfo 思考 bufinfo Dump整个手机系统的dmabuf Dump某个进程的dmabuf​​​​​​​ 以Table[buff…

Hive 的 安装与使用

目录 1 安装 MySql2 安装 Hive3 Hive 元数据配置到 MySql4 启动 Hive5 Hive 常用交互命令6 Hive 常见属性配置 Hive 官网 1 安装 MySql 为什么需要安装 MySql? 原因在于Hive 默认使用的元数据库为 derby,开启 Hive 之后就会占用元数据库,且不与其他客户…

Windows 远程控制之 PsExec

1、介绍: PsExec 是一种轻量级 telnet 替代品,可让你在其他系统上执行进程,并为控制台应用程序提供完整交互性,而无需手动安装客户端软件。 PsExec 最强大的用途包括在远程系统上启动交互式命令提示符,以及 IpConfig …

一篇文章彻底搞懂TiDB集群各种容量计算方式

背景 TiDB 集群的监控面板里面有两个非常重要、且非常常用的指标,相信用了 TiDB 的都见过: Storage capacity:集群的总容量 Current storage size:集群当前已经使用的空间大小 当你准备了一堆服务器,经过各种思考设计…

【JaveWeb教程】(21) MySQL数据库开发之多表设计:一对多、一对一、多对多的表关系 详细代码示例讲解

目录 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案例 2. 多表设计 关于单表的操作(单表的设计、单表的增删改查)我们就已经学习完了。接下来我们就要来学习多表的操作,首先来学习多表的设计。 项目开发中,在进行数据库…

OCR字符识别:开始批量识别身份证信息

身份证信息批量识别OCR是一项解决方案,它能够将身份证照片打包成zip格式或通过URL地址进行提交,并能够识别照片中的文本信息。最终,用户可以将识别结果生成为excel文件进行下载。 API接口功能: 1. 批量识别:支持将多…

SPDK中常用的性能测试工具

本文主要介绍磁盘性能评估的方法,针对用户态驱动Kernel与SPDK中各种IO测试工具的使用方法做出总结。其中fio是一个常用的IO测试工具,可以运行在Linux、Windows等多种系统之上,可以用来测试本地磁盘、网络存储等的性能。为了和SPDK的fio工具相…

大模型学习与实践笔记(四)

一、大模型开发范式 RAG(Retrieval Augmented Generation)检索增强生成,即大模型LLM在回答问题或生成文本时,会先从大量的文档中检索出相关信息,然后基于这些检索出的信息进行回答或生成文本,从而可以提高回…