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

【每日学点鸿蒙知识】长时任务、profiler allocation、事件订阅、getTagInfo、NativeWindow

1、HarmonyOS长时任务报错?

按照官方文档开启长时任务:

startContinuousTask() {
  let wantAgentInfo: wantAgent.WantAgentInfo = {
    // 点击通知后,将要执行的动作列表
    // 添加需要被拉起应用的bundleName和abilityName
    wants: [
      {
        bundleName: "com.xxxx.xxxx.news",
        abilityName: "com.xxxx.xxxx.news.EntryAbility"
      }
    ],
    // 指定点击通知栏消息后的动作是拉起ability
    actionType: wantAgent.OperationType.START_ABILITY,
    // 使用者自定义的一个私有值
    requestCode: 0,
    // 点击通知后,动作执行属性
    wantAgentFlags: [wantAgent.WantAgentFlags.UPDATE_PRESENT_FLAG]
  };

  // 通过wantAgent模块下getWantAgent方法获取WantAgent对象
  wantAgent.getWantAgent(wantAgentInfo).then((wantAgentObj: WantAgent) => {
    backgroundTaskManager.startBackgroundRunning(getContext(),
      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(getContext()).then(() => {
    console.info(`Succeeded in operationing stopBackgroundRunning.`);
  }).catch((err: BusinessError) => {
    console.error(`Failed to operation stopBackgroundRunning. Code is ${err.code}, message is ${err.message}`);
  });
}

调用stopContinuousTask方法报错:
Failed to operation stopBackgroundRunning. Code is 9800005, message is BussinessError 9800005: Continuous Task verification failed. The application has not applied for a continuous task.

长时任务有约束和限制,其中运行限制里面,如果应用申请了长时任务,但是未真正执行申请类型的长时任务或申请类型的任务已结束,系统会对应用进行管控。
简单的说,申请完长时任务,系统会在5秒之内检测时都执行申请类型的长时任务,没有,就直接结束任务了,那再触发stopContinuousTask就会报这个错。
约束限制可参见指导:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/continuous-task-V5#%E7%BA%A6%E6%9D%9F%E4%B8%8E%E9%99%90%E5%88%B6

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

2、profiler allocation 缺少ArkTS Allocation泳道?

profiler allocation 缺少ArkTS Allocation泳道(只有Memory和Native Allocation)

ArkTS Allocation泳道需要在Snapshot模板中勾选,Snapshot是分析ArkTS内存泄漏,allocation 是分析native内存泄漏。

3、HarmonyOS 多个页面订阅同一事件,上个页面销毁后取消订阅会影响其他页的事件?

emitter使用方法参考如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-emitter-V5
需要注意:on中增加的callback 和 off 中的callback需要是同一个,否则会把所有的订阅都取消。

4、HarmonyOS APP调用NFC,getTagInfo报错?

首先申明want:

let want: Want = {
  deviceId: '', // deviceId为空表示本设备
  bundleName: 'com.example.wht_app',
  abilityName: 'EntryAbility',
  moduleName: 'entry' // moduleName非必选
};
然后调用getTagInfo
try {
  tagInfo = tag.getTagInfo(want);
} catch (error) {
  console.log('手机NFC功能报错', "tag.getTagInfo catched error: " + error)
}

真机运行报错: tag.getTagInfo catched error: Error: Parameter error. The parameter number is invalid.

根据官方文档看参数Want需在分发Ability时,在系统onCreate入口函数的参数中获取。
官方指南可以参考一下:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/nfc-tag-access-guide-V5

5、HarmonyOS关于NativeWindow的创建和销毁?

NativeWindow注册完回调后,何时触发OnSurfaceCreated、何时触发OnSurfaceDestroyed,如何主动触发该回调

参考链接如下:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/_o_h___native_x_component-V5#onsurfacecreated


http://www.kler.cn/a/453048.html

相关文章:

  • SLES网络
  • React 第十九节 useLayoutEffect 用途使用技巧注意事项详解
  • 「Python数据科学」标量、向量、矩阵、张量与多维数组的辨析
  • 【论文阅读笔记】IC-Light
  • 计算机图形学知识点汇总
  • 本科阶段最后一次竞赛Vlog——2024年智能车大赛智慧医疗组准备全过程——12使用YOLO-Bin
  • 重温设计模式--状态模式
  • 基于Spring Boot的中国戏曲文化传播系统
  • Android 中的生产者-消费者模式实现
  • kubeadm 安装最新 k8s 集群
  • Ubuntu20.4 VPN+Docker代理配置
  • 正则表达式优化之实际应用场景优化
  • HBU深度学习实验17-优化算法比较和分析
  • 数据结构的基础与应用
  • 【贪吃蛇小游戏 - JavaIDEA】基于Java实现的贪吃蛇小游戏导入IDEA教程
  • HarmonyOS NEXT 实战之元服务:静态案例效果---查看国内航班服务
  • Go语言实现守护进程的挑战
  • 【人工智能】使用Python构建推荐系统:从协同过滤到深度学习
  • 在Windows11上编译C#的实现Mono的步骤
  • 高级sql技巧进阶教程
  • 《Java 与 Deeplearning4j:开启深度学习高效训练之旅》
  • 电脑缺失msvcp120.dll怎么弄?msvcp120.dll丢失的多个解决方法
  • 贪心算法解决用最少数量的箭引爆气球问题
  • 【Linux】linux系统修改磁盘 inode个数
  • Nginx配置:如何在一个域名下运行两个网站
  • Unity 6 中的新增功能