基于ArkUI页面切换类点击操作完成时延问题分析思路&案例

1、场景导入

ArkUI页面切换类点击操作完成时延,应用的UI界面有许多需要和用户交互的地方,按钮的点击是很常见的一种。点击按钮应用转场进入下一个页面。应用的点击完成时延,是从点击应用离手开始到转场页面所有占位符加载完成.

2、性能指标

2.1、性能指标介绍

应用或元服务内点击操作完成时延s标为900ms,允许误差范围5%。

2.2、性能衡量起止点介绍

通过Avidemux工具查看视频来确定点击完成时延起点和终点,然后计算出整个耗时的时间,计算出来的这个时间在后面分析trace的时候会用到。

3.问题定位流程

3.1、 常规定位前置流程

处理三方应用问题前首先需要先和三方应用及测试确认当前问题场景的静态KPI标准(S标):

  • 三方应用:和三方应用确认问题场景是否认可该标准,如不认可,相关问题需评审关闭。
  • 测试:和测试确认是否按照静态KPI标准执行的测试,测试步骤和性能衡量是否准确。

处理应用问题时,可以优先查看操作录屏,看看具体的操作场景,能否发现一些有助于定位的信息,还需要自己在单框架的手机上安装hap包运行应用操作观察帮助定位。例如可以初步看出网络请求的时间是否合理,应用布局的复杂度等。

点击操作完成时延Trace抓取请参考附录1: 点击操作完成时延Trace抓取方法

3.2、 问题定位思路

点击操作完成时延类问题的通用定位思路为先确认时延起止点,然后看起止点时延是否超900ms,没有超过就是达标,如果超过900ms,就需要进一步分析trace看看耗时主要发生在什么地方,然后确定是系统问题还是三方问题,然后对齐问题。处理流程如下图:

起点确认

搜索dispatchtouchevent,找到type=1的那个dispatchtouchevent,就是点击抬手起点。

Trace点名称

含义

问题定位作用

DispatchTouchEvent , type=1

手指点击后离手

作为点击完成

终点确认

点击操作完成时延的终点位置在trace上没有明确的trace点,需要按照2.2里面所介绍的方法确定终点。然后根据视频上数出来的加载完成的整个耗时在trace上拉相同的时间找到终点位置。这样就有了整个完成时延的耗时区间。并在Markers泳道做好标记。

Symbol Name

含义

initialRenderView

表示页面初始化

Program

代表程序执行进入纯native代码阶段,该阶段无JS代码执行,也无JS调用native或者native调用JS情况(需要切换到Callstack泳道看具体的调用栈信息,一般很难通过这里分析出有效的信息)。

rerender

主要发生在页面更新的场景

(BUILTIN)

表示JS标准库接口,Native实现,虚拟机提供

aboutToAppear

组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行

aboutToDisappear

aboutToDisappear函数在自定义组件析构销毁之前执行。不允许在aboutToDisappear函数中改变状态变量,特别是@Link变量的修改可能会导致应用程序行为不稳定

anonymous

匿名函数,具体需要查看代码确定此处是什么逻辑

每帧的预期耗时(ms) = 1000ms / 帧率 。如下图,鼠标点击选中超长帧,可以看到该帧的预期耗时Expected Duration 为8ms 276us,说明帧率是120,而实际耗时为93ms394us,远超预期耗时,就是超长帧,超长帧的耗时也会导致整个点击完成时延不达标。

4、常见根因归档

4.1、 因在点击操作的转场过程中加载资源、解析资源过长导致点击完成时延不满足

1,用DevEco Studio 的profiler的frame模板去抓trace,利用dispatchtouchevent type = 1 确定起点,通过视频数帧可以得出这个点击完成时延耗时2800ms,在trace上圈出这段时间来分析耗时。在ArkTS Callstack子泳道ArkVM并没有发现耗时,于是查看其他泳道,发现Callstack里面的子泳道workerThread有耗时异常。

2,把耗时的栈一层层展开,发现是在cocos2d::experimental:AudioDecoder 里面耗时1s135ms,耗时超过s标需要优化。在csloder里面耗时400ms左右,相对于s标900ms来说占比较大,有优化空间,怀疑是在点击跳转的期间在加载资源。

1:rawfile加载资源比较耗时,尝试改变加载资源的方式。加载方式参考链接文档https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/resource-categories-and-access-0000001774119914#section694911752315

2: AudioDecoderMp3: decodeTOPCM 耗时很长,音频解码耗时较多。

需要优化资源加载方式和音频解码优化。

4.2、 网络请求耗时久导致点击完成时延不满足

4.3、 组件使用不合理导致点击完成时延不满足 s标900ms, 实测999ms

3. 接着查看应用主线程泳道,发现在网络请求动画结束后面(网络请求示例在4.2中已展示)开始刷新列表内容,会看到有大量组件初始化的过程,还会调用很多aboutToDeleted,说明有旧的组件被移除。

下图为上图中红框展开的详细图,可以看出有很多的aboutToDeleted事件。

圈出有很多aboutToDeleted这段时间,切换到ArkVM泳道,可以看出每个aboutToDeleted所耗的时间。可以看出最多的aboutToDeleted耗时4ms左右,最少的也有几百us,再加上这个地方有大量的aboutToDeleted,累积起来耗时就比较多。可以用Resuable进行优化,从而达到组件的复用,避免创建和析构大量组件。

3.上述两步已经找出完成时延不达标的主要原因所在,接下来还可以利用 DevEco Testing 的UIViewer工具去判断组件是否有冗余的容器嵌套,冗余的嵌套会带来不必要的组件节点,加深组件树的层级,在创建和布局阶段会耗时比较久。

附录1:点击操作完成时延Trace抓取方法

 

 

 

 

 

注意:本课程是基于最新API12版本,HarmonyOS5.x为学习开发环境的!!!!课程笔记附件在课程第一个视频上!鸿蒙应用开发系列课程重点一览!课程亮点- 全面性:覆盖从基础语法到高级架构设计的全方位知识。- 实践性:通过实际编码练习,加深对知识点的理解和应用。- 深入性:深入探讨型系统,强化代码质量和开发效率。- 创新性:专注于ArkTS特性,引领鸿蒙开发新趋势。- 实用性:教授实用编程技巧,应对真实世界开发挑战。 学习阶段介绍【001-002】 开发学习准备 & 构建第一个ArkTS工程,了解项目结构,为后续开发奠定坚实基础。【003-005】引导你从设计并实现应用的第一张界面开始,逐步深入到多页面应用的构建。【006-013】 了解应用的打包发布流程,包括不同型的包(如HAR)的创建、配置、编译与发布。【014-023】 通过实践,掌握如何在应用中高效整合和利用HAR、HSP包中的资源。【024-033】 深入解析应用配置文件(如app.json5、module.json5)的结构与配置项。【044-054】 掌握ArkUI的核心概念与开发范式,包括声明式编程、组件化思想。【069-089】 学习如何使用状态管理装饰器(如@State、@Prop)来控制组件状态。【222-238】 Canvas的基本用法至组件动画,探索动画的魅力,从基础属性动画到高级的粒子动画。【239-255】 事件分发机制至多层级手势事件,通过实战演练,提升应用的交互体验和用户满意度。【其他章节】覆盖资源匹配与overlay新特性、环境感知(如深浅色适配)、主题设置等。 
本项目采用C++编程语言结合ROS框架构建了完整的双机械臂控制系统,实现了Gazebo仿真环境下的协同运动模拟,并完成了两台实体UR10工业机器人的联动控制。该毕业设计在答辩环节获得98分的优异成绩,所有程序代码均通过系统性调试验证,保证可直接部署运行。 系统架构包含三个核心模块:基于ROS通信架构的双臂协调控制器、Gazebo物理引擎下的动力学仿真环境、以及真实UR10机器人的硬件接口层。在仿真验证阶段,开发了双臂碰撞检测算法和轨迹规划模块,通过ROS控制包实现了末端执行器的同步轨迹跟踪。硬件集成方面,建立了基于TCP/IP协议的实时通信链路,解决了双机数据同步和运动指令分发等关键技术问题。 本资源适用于自动化、机械电子、人工智能等专业方向的课程实践,可作为高年级课程设计、毕业课题的重要参考案例。系统采用模块化设计理念,控制核心与硬件接口分离架构便于功能扩展,具备工程实践能力的学习者可在现有框架基础上进行二次开发,例如集成视觉感知模块或优化运动规划算法。 项目文档详细记录了环境配置流程、参数调试方法和实验验证数据,特别说明了双机协同作业时的时序同步解决方案。所有功能模块均提供完整的API接口说明,便于使用者快速理解系统架构并进行定制化修改。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值