移动端性能监控探索:鸿蒙 NEXT 探针架构与技术实现

作者:杨兰馨(楠瑆)

背景介绍

2024 年 10 月 22 日,华为在原生鸿蒙之夜正式发布 HarmonyOS NEXT(版本号 5.0.0,API 12 起)。与此前 HarmonyOS 3.1/4.0 的“双框架、双生态”过渡形态不同,NEXT 直接挥别 Android 开源项目(Android Open Source Project,AOSP),全面切换至自研鸿蒙内核,成为真正意义上的“纯鸿蒙”。

1. 三大关键词读懂 NEXT

  • 纯血:零 AOSP 代码,统一鸿蒙内核 + ArkTS 语法链,彻底去除 Android 兼容包袱。
  • 极速:方舟编译器在编译阶段直接将代码翻译为机器码,极大提升了系统运行效率。
  • 极简:一次开发、多端部署,1(手机)+8(平板、穿戴、车机等)+N(IoT 泛生态)覆盖全场景。

image

2. 开发底座全景

  • 开发 IDE:DevEco Studio(JetBrains 内核),实现可视化多端预览。
  • 开发语言:ArkTS 语言,在 TypeScript 语言基础上,强化静态类型检查,增强并发能力。

image

  • 编译方式:传统的 JS 程序开发中,应用程序往往带的是经过前端打包工具处理过的 JS bundle 文件,在程序运行阶段进行解释执行;这种运行方式需要设备有强大的计算能力。鸿蒙系统能够支持的设备范围广泛,覆盖从低端的 IoT 设备到高性能手机设备。采用传统的方式,无法保证多类型设备的体验一致性。在鸿蒙开发环境中,应用代码是通过前端编译器完成编译的。前端编译器按照语言规范解析源代码,编译成方舟运行时能够理解的二进制字节码格式 ,最后打包到应用中。

image

  • 编译产物:针对不同的部署态需求,模块的编译结果有三种目标形态。
    • HAR(HarmonyOS Archive):这是一种中间编译产物格式,它最终将被编译合并到 HSP 或 HAP 格式的包中。
    • HSP(HarmonyOS Shared Package):HSP 使得模块可以以运行态复用的形式共享。相较于 HAR,当有多个 HAP 包依赖与同一个 HSP 时,最终的打包产物中,HSP 只会存在一份。
    • HAP(HarmonyOS Ability Package):HAP 包是鸿蒙应用可单独安装的容器包。同一个 HAP 包可以支持在多个设备上运行。一次开发上架,多端分发、部署的效果。

image

3. 系统级开放能力图谱

  • 应用框架:提供应用程序开发的基础设施,如运行时、引擎、框架等相关开放能力。
  • 应用服务:提供应用程序开发的核心功能和服务,包括推送消息,认证登录,支付等开放能力。
  • 媒体:存储、处理、传输视频、音频、图片等多媒体内容的相关开放能力。
  • 图形:渲染、显示和交互的图形技术,包括 2D 和 3D 图形、动画、游戏等相关的开放能力。
  • AI:机器学习、深度学习、自然语言处理、计算机视觉等相关的开放能力。
  • 系统:通信、安全、驱动程序、DFX、诊断和测试等相关的开放能力。

image

至此,鸿蒙 NEXT 的基础轮廓已清晰——它不仅是手机 OS,更是面向万物智联时代的原生神经系统。随着鸿蒙 NEXT 生态系统的蓬勃发展,应用性能监控变得愈发重要。阿里云 ARMS 团队倾力打造的鸿蒙 NEXT SDK,为鸿蒙应用提供了业界领先的全链路监控解决方案。这不仅仅是一个 SDK,更是您洞察用户体验、优化应用性能的智能伙伴。

HarmonyOS SDK 架构与设计

1. SDK 整体架构

image

  • 接口层:最上层,对外暴露,供客户调用的 API。
  • 功能层:数据采集,具体包含 网络、交互、应用、卡顿、崩溃、自定义、Webview、页面等模块。
  • 核心层:基础服务,工具类,日志,时间,数据协议。会话管理,配置管理,OT的扩展层。
  • 依赖:Opentelemetry-ts/js,pako 做压缩.

2. 如何进行会话管理

首先明确会话的概念,会话是指一个用户在进入宿主 APP 到退出宿主 APP,这段时间内发生的行为轨迹。具体会话管理的原理:在应用启动时,就开始会话,将会话唯一ID(SessionID)写入全局变量中,在产生事件时,将当前的 SessionID 写入 Event 的指标中。

image

也就是说,会话是 SDK 用来串联管理用户行为轨迹的一种手段。开发者可以通过在控制台查看会话轨迹,明确用户在 APP 的操作行为上下文,进而展开多种角度的分析。当用户直接杀死应用或者后台切换时间大于 60s 时,开启新的会话。

3. 数据采集方案设计

针对不同场景的数据采集,SDK 根据鸿蒙系统的特性采用了不同的采集方案。整体采取了下面三种无感知采集方案。

方案1:鸿蒙系统级 API 助力

正如前文提到,鸿蒙系统提供了一些 Kit 能力,我们主要借助系统 Kit 中的性能分析服务(Performance Analysis Kit)的 HiAppEvent 能力,对异常、卡顿、启动时间进行采集。通俗地讲,就是该 API 提供了对系统事件的订阅能力,我们主要在订阅事件发生时的回调函数中,进行数据采集等操作。

HiAppEvent 提供了订阅应用事件和系统事件的能力,系统事件主要是指应用运行期间发生的性能、功耗、稳定性等问题。SDK 关心的异常事件、卡顿事件、启动事件都属于系统事件的范畴。下面以崩溃事件为例,HiAppEvent 提供了检测 NativeCrash 和 JsError 类型崩溃的能力,在系统完成崩溃信息收集后,进行事件生成与事件上报,SDK 只关心事件上报后的操作,并且根据上报的 params 的属性进行数据分析与处理,最后进行数据上报。下图展示了崩溃事件的采集原理。

image

方案2:监听 UI 组件的生命周期

具有生命周期跨度的事件,SDK 通过监听生命周期实现采集。以 NavDestination 组件为例,UiContext 提供了 UiObserver 的能力,其中的接口 on(type: 'navDestinationSwitch', callback: Callback): void 提供了对 Navigation 的页面切换事件的监听能力。在 SDK 初始化时,注册监听,并且构造数据处理的回调函数,在不同生命周期的进行不同的数据处理。

如下图所示,以页面停留时长为例,可以通过 onHidden 的时间节点和 onShown 的时间节点的差值计算。值得一提的是,在需要取消 navDestinationSwitch 监听的时候,需要指定取消对应回调函数的监听。否则,会导致全局所有关于 navDestinationSwitch 的监听都会失效,这样可能会造成 APP 某些功能失效。

image

方案3:结合 Hvigorw 插件实现编译时替换 (AOP)

在数据采集过程中,有一些事件系统并未提供对其的监听能力,也不具备完备的生命周期的监听能力。为了做到无感知的数据采集,SDK 采用 AOP 的理念,在代码编译时,实现无感知插桩。插件的开发整体思路参考了货拉拉的开源方案:https://github.com/HuolalaTech/AspectPro/tree/master,实现在代码编译过程中的代码替换。

image

以网络框架 ohos.net.http 为例,每一个 httpRequest 对应一个 HTTP 请求任务。SDK 对关键代码 http.createHttp() 进行插桩,添加关键处理逻辑,记录网络成功/失败的性能指标,进而生成 Network Span,从而上报数据。

结语

在鸿蒙 NEXT 的新时代,阿里云 ARMS RUM SDK 作为一款性能体验监控工具,可以作为辅助 APP 运维强有力的助手。ARMS RUM 鸿蒙 NEXT SDK 已经发布正式版本,可以参考接入文档 [ 1] 体验使用。相关问题可以加入“RUM 用户体验监控支持群”(钉钉群号: 67370002064)进行咨询。

参考资料:

华为官方开发指南

https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-global-interface

鸿蒙生态应用开发白皮书

https://developer.huawei.com/consumer/cn/doc/guidebook/harmonyecoapp-guidebook-0000001761818040

相关链接:

[1] 接入鸿蒙应用

https://help.aliyun.com/zh/arms/user-experience-monitoring/access-harmonyos-application

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

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

相关文章

哲讯科技:以数智之力,铸就企业SAP ERP实施新典范

哲讯科技:以数智之力,铸就企业SAP ERP实施新典范在当今瞬息万变的商业环境中,企业数字化转型已不是选择题,而是生存题。SAP ERP作为全球领先的企业资源规划系统,以其高度的集成性、前瞻的管理思想和强大的功能,成…

Shell 脚本编程:函数 - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

PR曲线绘制

PR曲线绘制 https://blog.csdn.net/xiang_gina/article/details/149962713作者:太一吾鱼水 宣言:在此记录自己学习过程中的心得体会,同时积累经验,不断提高自己! 声明:博客写的比较乱,主要是自己看的。…

5台电脑怎么同步文件最安全高效?别再只知道用局域网共享了!

还在为多台电脑文件同步烦恼,手动传输效率低?本文提供最佳解决方案,教你告别U盘。详解如何使用坚果云实现文件无感、实时同步,并借助其历史版本与云桥模式功能,安全且节省空间地管理多设备文件,是高效办公的必备…

建设信用网站的目的门户网站建设总结

windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用,这里就不多说。主要说说linux下svn的使用,因为linux下大部分的操作都是通过命令行来进行,所…

wordpress付费插件网站网络优化工程师证

2008/02/28 17:32i当ListView绑定数据源后,这个效果让我无从下手, 这个问题一直困扰着我,后来我在CSDN上发贴求助,问题终于得以解决,这是一位大大给的回复: 以下各节提供了三种方法,用于创建各行的 Background 颜色具有交替效果的 ListView。该示例还论述用于在添加…

自己建网站做那个模块好建设网站的费用如何账务处理

🍁🍁🍁图像分割实战-系列教程 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在Pycharm中进行 本篇文章配套的代码资源已经上传 unet医学细胞分割实战1 unet医学细胞分割实战2 unet医学细胞分割实战3 unet医学细胞分割实战4 unet…

专业开发网站多少钱做游戏类型的网站的好处

在我之前的文章 “Elasticsearch:使用 ELSER 进行语义搜索”,我们展示了如何使用 ELESR v1 来进行语义搜索。在使用 ELSER 之前,我们必须注意的是: 重要:虽然 ELSER V2 已正式发布,但 ELSER V1 仍处于 [预览…

什么是html5网站佛山新网站建设服务

【题目描述】 给你一个非负整数数组 nums ,你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标,如果可以,返回 true ;否则,返回 false 。 示例 1&am…

建站公司转型做什么业务wordpress吧

flashplayer的cpu渲染 bitmapData占用的内存分两块,一块是原始数据区,另一块是解压后的内存区10秒内如果没有使用这个bitmapdata,解压后的内存区会被释放,当10秒后重新使用,这个bitmapdata会再次解压,所以就…

有什么做礼品的卖家网站网站当地备案

概念:分包就是把一个完整的小程序项目,按照需求划分为不同的子包,在构建时打包成不同的分包,用户在使用时按需进行加载。 分包的优点:可以优化小程序首次启动的下载时间,在多团队共同开发时可以更好的解耦…

汕头网站建设只需要800网上申请注册公司网址

给你链表的头节点 head ,每 k 个节点一组进行翻转,请你返回修改后的链表。 k 是一个正整数,它的值小于或等于链表的长度。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点保持原有顺序。 你不能只是单纯的改变节点内部的值&a…

呼伦贝尔网站建设厦门网站建设报价

动态内存管理 1. 为什么存在动态内存管理2. 动态内存函数的介绍2.1 malloc函数和free函数2.2 calloc函数2.3 realloc函数 3. 常见的动态内存错误3.1 对NULL指针的解引用操作3.2 对动态开辟空间的越界访问3.3 对非动态开辟内存使用free函数3.4 使用free释放动态开辟内存的一部分…

关于CompatibilityHID例程的使用

CompatibilityHID例程主要演示HID和串口之间的数据传输 1、首先注意工程要根据MCU不同型号进行相应的配置,具体可参考下链接: EVT-CH32x系列芯片EVT工程使用注意说明2、例程演示需要用到相应的工具,下载链接如下:H…

【CVCVCV】GAN代码解析

【CVCVCV】GAN代码解析Posted on 2025-09-23 16:06 SaTsuki26681534 阅读(0) 评论(0) 收藏 举报0 通过读GAN的代码了解一下常规深度学习模型的整体工程结构 1

实用指南:通过ssh远程linux 盒子

实用指南:通过ssh远程linux 盒子2025-09-23 16:07 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

海外推广是什么工作seo网站代码

main.m // 点语法-编译器特性,编译器遇到点语法会自动展开成相应的 //语法 //为了让其他语言的程序员能快速入手OC加入了点语法 //点语法的本质还是方法调用,不是访问成员变量 //(区别java,java的点语法是访问成员变量 //OC里面就…

SystemVerilog 代码风格指南

代码被阅读的频率远远超过编写的频率。在团队中保持一致的编码风格能够显著提升代码的可读性,这是节省工程时间最有效(也是最简单)的方法之一。在众多编程语言中,Python 可以说是最优雅的。阅读他人编写的 Python …

赋能智慧化工:无锡哲讯科技SAP解决方案,构筑安全、合规与高效的数字新底座

赋能智慧化工:无锡哲讯科技SAP解决方案,构筑安全、合规与高效的数字新底座在波澜壮阔的化工产业图景中,效率、安全与合规是永恒的生命线。随着全球市场竞争加剧、环保法规日趋严格以及供应链不确定性增加,数字化转…

seo的网站网站建立计划书

JDK和JRE的区别 定义:JDK(Java Development Kit)是Java开发工具包的缩写,它是Java开发人员必备的工具。JDK包含了编译器(javac)、Java虚拟机(JVM)和Java类库等开发工具和资源。它提供了开发、编译、调试和运行Java程序所需的一切…