鸿蒙|性能优化-工具使用

127 阅读4分钟

概览:本文介绍了鸿蒙应用优化的基本概念与实施方法,讲解了优化工具的分类以及实际操作,重点介绍了Code Linter、AppAnalyzer、ArkUI Inspector以及Profiler的使用。

什么是性能优化?

定位和解决应用或元服务在运行期间可能出现启动白屏、动画不流畅、操作卡顿、手机发烫、甚至崩溃闪退等问题。

性能优化工具

检测工具:
1Code Linter-静态扫描工具
2、AppAnalyzer-动态运行工具
直接发现问题、提供解决方案

分析工具:
1、ArkUl Inspector-界面状态分析工具
2、Profiler-性能实时监测工具
得到应用和设备的运行状态 ,根据运行状态发现问题、制定解决方案

检测代码:

@Entry
@Component
struct Index {
  @State list: number[] = Array(15).fill(1)

  build() {
    Column() {
      Button('添加10条数据')
        .onClick(() => {
          this.list.push(...Array(10).fill(1))
        })
      Scroll() {
        Column() {
          ForEach(this.list, (item: number, index: number) => {
            ListItem() {
              Text(`第${index + 1}个Text`)
                .width('100%')
                .height(50)
                .backgroundColor(index % 2 === 0 ? '#FFF0F0' : '#FFFFFF')
            }
          })
        }
      }
      .layoutWeight(1)
    }
    .width('100%')
    .height('100%')
  }
}

Code Linter (静态扫描工具)

选中单个或多个工程文件目录后,点击右键 ,选择菜单CodeLinter下的全量检测或增量检测。

屏幕截图 2026-03-05 000248.png

配置文件:项目根目录下的code-linter .json5,如未配置按照默认编程规范对ets文件进行检测。

代码检测规则: developer.huawei.com/consumer/cn…

双击查看出现问题的位置,右侧有原因和修改建议,documentation(文档)、best practice(最佳实践)。

屏幕截图 2026-03-05 000557.png

AppAnalyzer(动态运行工具)

打开编辑器,找到菜单栏Tools窗口,选择AppAnalyzer。

未下载python会提示下载,选择设备(真机) ,按需选择性能体检套餐,开始检测。

屏幕截图 2026-03-05 004123.png

ArkUl Inspector(界面状态分析工具)

打开编辑器,在下方导航栏,选择ArkUI Inspector。

将程序安装至设备后启动 ,选择需要分析的程序,等待分析结果。

观察页面会显示多少个组件,不显示的组件没必要渲染,修改组件数量,可看到左边组件树减少。

屏幕截图 2026-03-05 004714.png

Profiler(性能实时监测工具)

将应用运行至设备(真机)。

打开编辑器底部的Profiler,选择监测的设备、应用、进程 ,点击实时监控选项卡的Start开启监测。

System Events(系统事件状态的统计情况)
Anomaly(设备侧上报的异常事件)
Foreground Ability(当前展示的Ability)
CPU(CPU使用率及空闲情况)
Memory(应用内存值、其他进程内存、空闲情况)
FPS(当前设备屏幕的帧率瞬时值 )
GPU(GPU使用率的瞬时值)
Temperature(当前温度信息,采集周期3秒)
DeviceCurrent(当前设备最大、平均、最新电流值)
Energy(各项数据周期内平均功耗占比)

屏幕截图 2026-03-05 005033.png

Profiler 监测录制:

选择录制模版(常用Launch、Frame、Allocation)。

点击Create Session创建会话。

点击start开始录制,进行设备操作 ,点击停止自动保存录制,解析后查看分析结果。

1、Launch(重点关注冷启动过程):

观察创建10000个组件和创建10个组件的差异。

关注ArkTs Callstack的ArkVM(方舟编译器的运行时间)program(程序耗时)。

屏幕截图 2026-03-05 005318.png

2、Frame(关注丢帧情况):

点击两次增加数据,页面更新,点击stop停止录制。

Jank Count:丢帧次数。

屏幕截图 2026-03-05 010653.png

Frame:帧号

Jank Type:AppDeadlineMissed表示丢帧。

截屏2026-03-13 10.25.03.png

Duration(耗时):每一帧8毫秒左右,超过就丢帧,点击Open Layout查看做什么丢帧了。

屏幕截图 2026-03-05 010907.png

如果无法查看Open Layout复制Vsync序号去搜索,可查看这一帧都做了什么。

截屏2026-03-13 10.42.25.png

TextLayoutAlgorithm的id为7,通过ArkUi Inspector查看id为正好是Text,这一帧主要渲染Text。

截屏2026-03-13 10.47.22.png 截屏2026-03-13 10.52.15.png

从添加10条数据改成5条就不丢帧了(因为每一次绘制的数据量稍微大一点,超出了预期时间,所以在这一 帧要不没办法完成,要不没办法开始导致丢帧,可以减少数据量)。

3、Allocation(内存状况):

点数新增数据,点击频繁一些,不断新增数据,右侧黄色泳道不断上升,内存量上升了。

Memory查看每时每刻内存的一个占用情况。

屏幕截图 2026-03-05 011143.png

Native Allocation 的 call Trees查看堆调用次数,如果是黄色的点击查看详细情况,如果是灰色的表示已经到底层了就不能查看了。

屏幕截图 2026-03-05 011240.png