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

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

时间:2024-01-09 11:03:02浏览次数:25  
标签:原生 鸿蒙 长时 申请 任务 应用 error message

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

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

** 长时任务类型**

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


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

申请限制:Stage模型中,长时任务仅支持UIAbility申请;FA模型中,长时任务仅支持ServiceAbility申请。

数量限制:一个UIAbility(FA模型则为ServiceAbility)同一时刻仅支持申请一个长时任务,即在一个长时任务结束后才可能继续申请。如果一个应用同时需要申请多个长时任务,需要创建多个UIAbility;一个应用的一个UIAbility申请长时任务后,整个应用下的所有进程均不会被挂起。

运行限制:系统会进行长时任务校验。若应用申请了长时任务,但未真正执行申请类型的长时任务或申请类型的任务已结束,系统会对应用进行管控。例如系统检测到应用申请了AUDIO_PLAYBACK(音频播放),但实际未播放音乐,系统则会终止对应的进程。

接口说明:

主要接口:

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


代码开发: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%')
}
}

标签:原生,鸿蒙,长时,申请,任务,应用,error,message
From: https://blog.51cto.com/u_14946066/9158007

相关文章

  • AI新纪元:AI原生企业崛起
    导读:当前,以大模型为代表的人工智能技术已成为驱动经济社会发展、提升国家竞争力的关键要素,并以前所未有的速度重塑产业的新格局、驱动经济发展的新方向,并展现出强大的赋能效应,给千行百业带来“质量与效率”的变革。本文将分享九章云极DataCanvas公司副总裁于建岗在2024中国信通院IC......
  • 【云原生】kubernetes 1.24 安装教程
    博主介绍:–我是了凡微信公众号【了凡银河系】期待你的关注。未来大家一起加油啊~前言下面记录kubernets1.24安装记录。主要使用calico作为网络插件、kongingress作为路由转发、nginx作为四层代理。如果安装过程中遇到问题,及时沟通,如果不能及时回应,可以关注【了凡银河系】微......
  • 鸿蒙原生应用/元服务开发-消息通知整体说明
    应用/元服务可以通过通知接口发送通知消息,终端用户可以通过通知栏查看通知内容,也可以点击通知来打开应用。通知常见的使用场景:显示接收到的短消息、即时消息等。显示应用的推送消息,如广告、版本更新等。显示当前正在进行的事件,如下载等。HarmonyOS通过ANS(AdvancedNotificationSer......
  • 原生 CSS 中类似 Sass 的嵌套
    如果你和我一样觉得Sass的CSS嵌套功能非常有用,那么你一定会很高兴地知道,我们的好日子就要来了。因此,如果你不知道,Sass的CSS嵌套功能允许您将CSS选择器嵌套在其他选择器中。例如,你可以这样写:.parent{.child{color:red;}}这将被编译成以下CSS。.par......
  • 鸿蒙原生应用/元服务开发-通知添加行为意图
    WantAgent提供了封装行为意图的能力,这里所说的行为意图主要是指拉起指定的应用组件及发布公共事件等能力。HarmonyOS支持以通知的形式,将WantAgent从发布方传递至接收方,从而在接收方触发WantAgent中指定的意图。例如,在通知消息的发布者发布通知时,通常期望用户可以通过通知栏点击拉起......
  • 【云原生 | Kubernetes 系列】— Kubernetes存储方案
    目录【云原生|Kubernetes系列】—Kubernetes存储方案......
  • HarmonyOS鸿蒙操作系统架构
    HarmonyOS鸿蒙操作系统是基于微内核架构的,其核心组件包括:1.调度器(Scheduler):负责任务的调度和执行。2.内存管理(MemoryManagement):负责内存的分配、回收和保护。3.文件系统(FileSystem):负责对存储设备的访问和管理。4.设备驱动(DeviceDriver):负责硬件设备的控制和管理。5.网络......
  • 想快人一步!不得不看的《鸿蒙(HarmonyOS)学习指南》
    鸿蒙就是鸿蒙,安卓就是安卓据鸿蒙产业链人士透露,华为下一代鸿蒙5.0版本或将不再兼容安卓系统,此举意味着鸿蒙系统将退出Android生态圈,华为手机也将只支持鸿蒙系统应用。今后国内手机操作系统,将形成由安卓与iOS两大阵营演变成Android、iOS、Harmony三分天下的局面。随着鸿蒙发展速度越......
  • 170万人参加鸿蒙学堂官方培训,还要犹豫加入鸿蒙吗?
    你一定想不到的在一年一度的开发者大会以外,华为还在日常举行各种线上、线下,或者直接深入校园的开发者活动。HarmonyOS创新实训营、HUAWEIDeveloperDay、华为校园开发者计划等等不胜枚举,似乎已然覆盖互联网相关行业的个角落。超乎人们的意料,今年已有超过170万人参加了鸿蒙学......
  • 礼品卡原生卡包预约项目优惠劵余额卡转增小程序开发
    礼品卡原生卡包预约项目优惠劵余额卡转增小程序开发用户登录和注册:用户可以使用手机号码或其他方式登录和注册账户。资讯浏览:用户可以浏览最新的项目资讯,了解相关的优惠信息和活动信息。项目预约:用户可以浏览可预约的项目列表,并选择感兴趣的项目进行预约。预约成功后,用户会收到预约......