当前位置: 首页 > news >正文

【每日学点鸿蒙知识】长时任务、HarmonyAppProvision申请、preferences、Testing工具、应用保活

1、HarmonyOS 如何解决语音聊天、通信app退后台系统采集播放回调就会停止,回前台未恢复?

关于应用切到后台系统采集播放回调停止的问题原因如下:为了降低设备耗电速度、保障用户使用流畅度,系统会对退至后台的应用进行管控,包括进程挂起(即系统不再为应用进程分配CPU资源,同时对应的公共事件等不再发给应用进程)和进程终止。

建议采用 后台任务开发服务 中的 长时任务,在页面的 onPageHide生命周期中申请长时任务,并在onPageShow取消长时任务,可以采用 backgroundTaskManager.startBackgroundRunning 接口来申请长时任务。

  • 可以参考指南中的demo,建议参考Stage模型的demo,相关开发说明及注意事项也在其中,链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/continuous-task-V5
  • 申请任务相关的API文档,链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resourceschedule-backgroundtaskmanager-V5

Stage模型中示例代码:

  1. 需要申请ohos.permission.KEEP_BACKGROUND_RUNNING权限,配置方式请参见声明权限
  2. 声明后台模式类型。在module.json5配置文件中为需要使用长时任务的UIAbility声明相应的长时任务类型(配置文件中填写长时任务类型的配置项)。
 "module": {"abilities": [{"backgroundModes": [// 长时任务类型的配置项"audioRecording"], }],...}
  1. 导入模块。长时任务相关的模块为@ohos.resourceschedule.backgroundTaskManager@ohos.app.ability.wantAgent,其余模块按实际需要导入。
 import backgroundTaskManager from '@ohos.resourceschedule.backgroundTaskManager';import UIAbility from '@ohos.app.ability.UIAbility';import window from '@ohos.window';import AbilityConstant from '@ohos.app.ability.AbilityConstant';import Want from '@ohos.app.ability.Want';import rpc from '@ohos.rpc';import { BusinessError } from '@ohos.base';import wantAgent, { WantAgent } from '@ohos.app.ability.wantAgent';
  1. 申请和取消长时任务。
    • 在Stage模型中,长时任务支持设备本应用申请,持跨设备或跨应用的申请仅对系统应用开放。设备本应用申请长时任务示例代码如下:
 @Entry@Componentstruct Index {@State message: string = 'ContinuousTask';// 通过getContext方法,来获取page所在的UIAbility上下文。private context: Context = getContext(this);startContinuousTask() {let wantAgentInfo: wantAgent.WantAgentInfo = {// 点击通知后,将要执行的动作列表// 添加需要被拉起应用的bundleName和abilityNamewants: [{bundleName: "com.example.myapplication",abilityName: "com.example.myapplication.MainAbility"}],// 指定点击通知栏消息后的动作是拉起abilityactionType: wantAgent.OperationType.START_ABILITY,// 使用者自定义的一个私有值requestCode: 0,// 点击通知后,动作执行属性wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]};// 通过wantAgent模块下getWantAgent方法获取WantAgent对象wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {backgroundTaskManager.startBackgroundRunning(this.context,backgroundTaskManager.BackgroundMode.AUDIO_RECORDING, wantAgentObj).then(() => {console.info(`Succeeded in operationing startBackgroundRunning.`);}).catch((err: BusinessError) => {console.error(`Failed to operation startBackgroundRunning. Code is ${err.code}, message is ${err.message}`);});});}stopContinuousTask() {backgroundTaskManager.stopBackgroundRunning(this.context).then(() => {console.info(`Succeeded in operationing stopBackgroundRunning.`);}).catch((err: BusinessError) => {console.error(`Failed to operation stopBackgroundRunning. Code is ${err.code}, message is ${err.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%')}}    

2、HarmonyOS HarmonyAppProvision信息申请后依然无权限?

  • 关于申请受限ACL权限步骤可以参考以下文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/ide-signing-0000001587684945#section157591551175916
  • 当前部分权限支持通过自动签名快速申请:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/ide-signing-V5#section9786111152213
  • 应用权限列表中标记ACL使能为true的权限可通过应用市场(AGC)申请:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/permissions-for-all-V5

3、HarmonyOS preferences存储的数据大于最大长度之后,建议使用什么来存储呢?

可使用键值型数据库----单版本数据库,针对每条记录,Key的长度≤1 KB,Value的长度<4 MB。
参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/data-persistence-by-kv-store-V5

4、使用Deveco Testing工具时,如何在进行APP性能测试的同时检测APPCPU和GPU的功耗状态?

目前可以通过“性能功耗测试/场景化性能测试”检测

5、HarmonyOS 关于应用保活问题?

  1. 申请后台任务 一个app只需要申请一个吗?比如app在某几个页面时,app后台,需要后台任务保活,使用一个就可以?还是说每个都需要单独申请呢?
  2. 还有就是后台保活的api是哪个?

解答:

  1. 同一时刻可以申请一个或者多个类型的长时任务,存在多类型业务时,只需要申请主业务类型长时任务。只要主申请的任务存在,应用就不会被冻结
  2. 后台长时任务,参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/continuous-task-V5

长时任务申请约束与限制

  • 申请限制:Stage模型中,长时任务仅支持UIAbility申请;FA模型中,长时任务仅支持ServiceAbility申请。
  • 数量限制:一个UIAbility(FA模型则为ServiceAbility)同一时刻仅支持申请一个长时任务,即在一个长时任务结束后才可能继续申请。如果一个应用同时需要申请多个长时任务,需要创建多个UIAbility;一个应用的一个UIAbility申请长时任务后,整个应用下的所有进程均不会被挂起。
  • 运行限制:在手机产品上,系统会进行长时任务校验。
    场景1:若应用申请了长时任务,但未真正执行申请类型的长时任务或申请类型的任务已结束,系统会对应用进行管控。例如系统检测到应用申请了AUDIO_PLAYBACK(音视频播放),但实际未播放音乐,长时任务会被取消。
    场景2:若应用没有申请对应的长时任务类型,但执行了相关类型的长时任务,系统会对应用进行管控。例如系统检测到应用只申请了AUDIO_PLAYBACK(音视频播放),但实际上除了播放音乐(对应AUDIO_PLAYBACK类型),还在进行录制(对应AUDIO_RECORDING类型),系统会对应用进行管控。
    场景3:若运行长时任务的进程后台负载持续高于所申请类型的典型负载,系统会对应用进行管控。
http://www.lryc.cn/news/513140.html

相关文章:

  • 步进电机驱动算法——S形加减速算法原理
  • 【图像去噪】论文复现:大道至简!ZS-N2N的Pytorch源码复现,跑通源码,获得指标计算结果,补充保存去噪结果图像代码,代码实现与论文理论对应!
  • 2024年中国新能源汽车用车发展怎么样 PaperGPT(一)
  • 数据结构-排序思想
  • python 快速排序(Quick Sort)
  • MySQL数据库——常见慢查询优化方式
  • 【AIGC篇】AIGC 引擎:点燃创作自动化的未来之火
  • C语言性能优化:从基础到高级的全面指南
  • 常用的公共 NTP(网络时间协议)服务器
  • Kafka中的Topic和Partition有什么关系?
  • Unity 使用UGUI制作卷轴开启关闭效果
  • MarkDown怎么转pdf;Mark Text怎么使用;
  • 整合版canal ha搭建--基于1.1.4版本
  • QGIS移动图元功能
  • 【模电刷题复习--填空】
  • shardingsphere-jdbc-core-spring-boot-starter的性能问题(理论)
  • Java Map 集合详解:基础用法、常见实现类与高频面试题解析
  • 一款基于.Net方便、快捷的数据库文档查询、生成工具
  • Linux平台下实现的小程序-进度条
  • Ubuntu 22.04.5 修改IP
  • 解决virtualbox出现开启DHCP之后ubuntu虚拟机之后IP重复的问题
  • Java开发工具-Jar命令
  • UE5通过蓝图节点控制材质参数
  • 敖行客年终总结-AT Work 1.0发布
  • 线程锁和协程锁的区别
  • 手机租赁平台开发助力智能设备租赁新模式
  • 掌握大数据处理利器:Flink 知识点全面总结【上】
  • 人工智能知识分享第四天-线性回归
  • Appium 2.0:移动自动化测试的革新之旅
  • 牛客网最新1129道 Java 面试题及答案整理