相关问题
#鸿蒙学习大百科#HiDumper命令行工具的作用是什么?
345浏览 • 1回复 待解决
HarmonyOS 测试命令行相关使用
509浏览 • 1回复 待解决
Code Linter这个工具有没有命令行模式
323浏览 • 1回复 待解决
能否提供命令行构建?
753浏览 • 1回复 待解决
使用命令行CMake构建NDK工程
1025浏览 • 1回复 待解决
HarmonyOS 怎么使用命令行构建项目
442浏览 • 1回复 待解决
MySQL 命令行如何导出 DDL?
3913浏览 • 1回复 待解决
如何使用命令行进行app打包
2065浏览 • 1回复 待解决
HarmonyOS 使用命令行提取调试设备的文件
126浏览 • 1回复 待解决
HarmonyOS直接命令行脚本编译
397浏览 • 1回复 待解决
HarmonyOS 优化性能,网络、webview的建议
411浏览 • 1回复 待解决
组件需要多次更新时如何优化性能
1951浏览 • 1回复 待解决
使用hvigorw命令行工具执行构建命令时,有没有全局地构建整个工程所有包的指令
1104浏览 • 1回复 待解决
如何通过命令行查询窗口信息
2186浏览 • 1回复 待解决
HarmonyOS 有命令行打包的文档吗?
156浏览 • 1回复 待解决
组件需要多次更新时,如何优化性能
1859浏览 • 1回复 待解决
HarmonyOS 命令行自动打包命令相关技术指导
508浏览 • 1回复 待解决
能否提供命令行,手动编译har或者hsp
811浏览 • 1回复 待解决
HarmonyOS 命令行进行文本输入
38浏览 • 1回复 待解决
HarmonyOS 自动化/命令行获取崩溃日志
56浏览 • 1回复 待解决
native如何通过命令行编译成so?
2539浏览 • 1回复 待解决
App包的提交 ,是否有命令行工具直接支持向应用管理后台提交App包
1209浏览 • 1回复 待解决
新手提问:hi3861怎么启动命令行呢?
8620浏览 • 2回复 待解决
使用命令行工具进行签名时,编译器自动生成的签名文件的keyPassword和storePassword如何查找
506浏览 • 1回复 待解决
简介
HiDumper是系统为开发、测试人员、IDE工具提供的系统信息获取工具,帮助开发者分析、定位问题。在应用开发过程中,开发者可以使用Hidumper命令行工具获取UI界面组件树信息,配合ArkUI Inspector等图形化工具定位布局性能问题;还可以使用该命令行工具获取如内存和CPU使用情况等各项系统数据,对应用性能进行评估。本文通过一些示例介绍在优化应用性能过程中如何使用Hidumper命令行工具。
开发者可参考下面步骤,通过使用HiDumper提供的-s、–mem、–cpuusage等命令进行性能分析。有关HiDumper其他功能的详细介绍可查看《HiDumper概述》。
HiDumper查看组件信息
开发者可以按照以下步骤获取组件信息,相比ArkUI Inspector可更灵活的获取组件的细粒度信息。
1. 开启ArkUI的debug模式。
1. 重新启动应用。
2. 获取当前页面对应应用的window ID。
WindowName
说明
EntryView
桌面
RecentView
最近任务
SystemUi_NavigationB
三键导航
SystemUi_StatusBar
状态栏
ScreenLockWindow
锁屏
1. 通过WinId获取对应页面的控件树文件
1. 下载组件树文件到本地。由于安全机制此处的路径非真实路径,需要使用 find 命令查找对应文件的准确路径。
1. 打开文件查看应用组件树。组件树文件详细列出了每个组件的各项属性,如子组件数量childSize、组件ID、背景色BackgroundColor等。
查看if/else控件
当使用if/else时,if/else语句会被当成一个组件,作为节点存在于组件树上。使用HiDumper命令时,打印的组件树内容包含if/else组件信息(使用ArkUI Inspector工具,if/else组件不会被作为节点项显示在组件树上)。下述代码中通过if语句: if(this.isShow) 实现Row组件的创建和销毁。
当isShow为true时,Row组件显示,此时使用HiDumper查看组件树文件,可以发现使用if/else条件语句时,if/else组件也被当作节点被创建,Row组件被当作子组件嵌套在其中。
当isShow为false时,Row组件隐藏,此时使用HiDumper查看组件树文件,可以发现使用if/else条件语句时,if/else组件也被当作节点被创建,但Row组件并不会被加载。
对比三种情况的组件数可以发现:
查看visibility属性
开发者可以使用visibility属性控制组件的显隐。下述代码中通过visibility属性: visibility(this.isVisible) 实现Row组件的显示和隐藏。
当isVisible为Visible时,Row组件显示,此时使用HiDumper查看控件树文件,Visible属性为0,FrameRect属性内组件的宽和高为450。
当isVisible为Hidden时,Row组件隐藏,此时使用HiDumper查看控件树文件,Visible属性为1,FrameRect属性内组件的宽和高为450。
当isVisible为None时,Row组件隐藏,此时使用HiDumper查看控件树文件,Visible属性为2,FrameRect属性内组件的宽和高为0。
HiDumper查看内存信息
开发者可以通过以下步骤,获取到当前应用的内存信息。
1. 打开示例应用,运行 hdc shell hidumper -s WindowManagerService -a '-a' ,获取到当前应用的pid。
2. 输入 hidumper --mem [pid] ,并将命令中的 [pid] 换成当前应用的pid,就可以获取到示例应用的内存信息了,如下图所示:
一般情况下,开发者只需要关注PSS (Proportional Set Size(实际使用物理内存))Total一列的数据,即示例应用实际使用的物理内存。在上图中可以看到,应用总共占用了53395KB的内存,主要包括ark ts heap(ArkUI堆内存)的3411KB以及native heap的45846KB。
HiDumper查看CPU信息
在应用开发中,经常会遇到需要大量计算的场景,HiDumper提供了查看CPU使用率的功能,方便开发者进行性能优化。下面将以Chat为例,展示如何使用HiDumper查看CPU信息。
1. 编译项目、安装并打开Chat应用,运行以下hidumper命令获取当前应用的Pid。
1. 运行 hidumper --cpuusage [pid] ,获取Chat应用的CPU信息,如下图所示:
一般情况下,只需要关注Total Usage(总使用率)、User Space(用户程序的运行空间)、Kernel Space(内核的运行空间)。其中,Total Usage用于统计应用的总CPU使用率,User Space用于执行简单的运算,Kernel Space用于调用系统的资源。通过上图可以看到,当前示例的三项数据分别是11%,11%,0%,表示当前应用并没有调用系统资源,只需要查看应用的运行空间即可。如果想要查看CPU在一段时间内的使用率,则可以通过Shell脚本,多次执行 hdc shell hidumper --cpuusage [pid] 命令,并通过 hdc shell hidumper --zip --cpuusage 将结果输出到手机的/data/log/hidumper目录下,方便进行分析。