在Harmony应用开发中,理解和监控用户行为以及应用性能至关重要。HiAppEvent与HiTraceMeter是HarmonyOS为开发者提供的强大工具,旨在帮助开发者捕获关键事件和追踪性能瓶颈。本文将详细介绍这两个工具的概念、使用场景和实现步骤,附带示例代码。

HiAppEvent:事件打点与订阅

HarmonyOS入门之HiAppEvent与HiTraceMeter_DFX

基本概念

  • 打点:记录用户操作,提供业务数据,便于分析。
  • 事件设计规范:包括领域、名称、类型、参数,确保信息清晰准确。
  • 事件类型:行为、故障、统计、安全四类。
  • 接口说明write()用于打点,addWatcher()removeWatcher()用于订阅与取消订阅事件。

开发步骤

  1. 订阅事件:在应用启动时添加观察者。
  2. 打点记录:在用户交互点调用write()接口记录事件。

示例代码

// EntryAbility.ts
import hiAppEvent from '@ohos.hiviewdfx.hiAppEvent'

// 添加订阅
hiAppEvent.addWatcher({
  name: "watcher1",
  appEventFilters: [{ domain: "button" }],
  triggerCondition: { row: 1 },
  onTrigger: function (curRow, curSize, holder) {
    // 处理事件
  }
})

// Index.ets
import hiAppEvent from '@ohos.hiviewdfx.hiAppEvent'

// 打点记录
Button("writeTest").onClick(()=>{
  hiAppEvent.write({
    domain: "button",
    name: "click",
    eventType: hiAppEvent.EventType.BEHAVIOR,
    params: { click_time: 100 }
  }).then(() => {
    // 成功回调
  }).catch((err) => {
    // 错误处理
  })
})
HiTraceMeter:性能打点跟踪

基本概念

  • hiTraceMeter Tag:用于分类跟踪数据,每个子系统对应一个Tag。

实现原理

  • 应用通过hiTraceMeter接口进行打点,数据存储于内核ftrace缓冲区,通过命令行工具读取并保存。

接口说明

  • startTrace():标记任务开始。
  • finishTrace():标记任务结束。
  • traceByValue():标记数值变量。

开发步骤

  1. 开始跟踪:在业务逻辑关键点调用startTrace()
  2. 结束跟踪:完成业务后调用finishTrace()
  3. 数值跟踪:调用traceByValue()记录数值变化。

示例代码

// ArkTS应用
import hitrace from '@ohos.hiTraceMeter';

hitrace.startTrace("HITRACE_TAG_APP", 1001);
console.log(`HITRACE_TAG_APP running`);
hitrace.finishTrace("HITRACE_TAG_APP", 1001);

// JS应用
import hiTraceMeter from '@ohos.hiTraceMeter'

hiTraceMeter.startTrace("business", 1);
console.log(`business running`);
hiTraceMeter.finishTrace("business", 1);

运行与数据分析

  • 使用hdc shellhitrace命令行工具抓取和分析跟踪数据。
hdc shell
hitrace --trace_begin app
hitrace --trace_dump | grep tracing_mark_write
hitrace --trace_finish

抓取trace成功的数据如下所示

<...>-3310    (-------) [005] .... 351382.921936: tracing_mark_write: S|3310|H:HITRACE_TAG_APP 1001
 <...>-3310    (-------) [005] .... 351382.922138: tracing_mark_write: S|3310|H:HITRACE_TAG_APP 1002
 <...>-3310    (-------) [005] .... 351382.922165: tracing_mark_write: F|3310|H:HITRACE_TAG_APP 1001
 <...>-3310    (-------) [005] .... 351382.922175: tracing_mark_write: F|3310|H:HITRACE_TAG_APP 1002
 <...>-3310    (-------) [005] .... 351382.922182: tracing_mark_write: S|3310|H:HITRACE_TAG_APP 1003
 <...>-3310    (-------) [005] .... 351382.922203: tracing_mark_write: F|3310|H:HITRACE_TAG_APP 1003
 <...>-3310    (-------) [005] .... 351382.922210: tracing_mark_write: S|3310|H:HITRACE_TAG_APP 1004
 <...>-3310    (-------) [005] .... 351382.922233: tracing_mark_write: C|3310|H:myTestCount 3
 <...>-3310    (-------) [005] .... 351382.922240: tracing_mark_write: F|3310|H:HITRACE_TAG_APP 1004
 <...>-3310    (-------) [005] .... 351382.922247: tracing_mark_write: S|3310|H:HITRACE_TAG_APP 1004
 <...>-3310    (-------) [005] .... 351382.922266: tracing_mark_write: F|3310|H:HITRACE_TAG_APP 1004

以上示例展示了如何使用HiAppEvent和HiTraceMeter增强应用监控和性能分析能力。通过合理运用这些工具,开发者可以更深入地理解应用行为,及时发现并解决潜在问题,提升用户体验。