应用退出不知道原因?HarmonyOS有账本
头像 鸿蒙小助手 2026-06-29 11:07:04    发布
4218 浏览 28 点赞 4 收藏

本原创文章帖发布在华为开发者联盟社区,欢迎开发者前往访问评论交流,更多与该内容相关讨论,请点击原帖查看:

应用退出不知道原因?HarmonyOS有账本-华为开发者话题 | 华为开发者联盟


      在移动端应用开发过程中,可能出现应用闪退、后台被强制退出等异常行为。除崩溃、Freeze 等显性故障外,也存在系统资源调度引发的非故障类退出,仅依靠传统故障日志,无法完整还原退出现场,给问题排查带来较大阻碍。 针对这一痛点,HarmonyOS 6.1 上线 HiAppEvent 退出原因订阅能力,通过系统级事件采集,记录应用上一次应用退出的全量原因,助力开发者高效完成异常数据汇总与根因分析。下文将对该机制的原理、开发实践及应用场景展开详细解读。


一、背景与挑战

1.1 当前应用退出痛点

      • 退出原因记录分散:系统杀应用逻辑分散在多个模块(如资源管控、故障处理、后台任务管理等),缺乏统一的维测接口。

      • 区分退出是否是故障:部分退出原因是正常的用户行为,或者是系统正常的后台管理行为,需要剔除这些正常退出原因,关注消费产品使用者体验层面的异常问题。

1.2 常见退出场景分类


reason(string)产生原因
LowMemoryKill同前面的lastExitMessage值为Memory Pressure场景,即整机低内存触发,优先级由低到高终止应用。
IllegalAudioRendererBySuspend应用的音频播放未申请合理的后台任务,其退至后台后仍有大量音频播放。
PowerSaveClean整机切换到省电模式或应急模式。
RssThresholdKiller应用的RSS内存超一定阈值。
UserRequest最近任务上划或清理。
ThreadBlock6S应用主线程卡死超时。
AppInputBlock用户输入响应超时。
LifecycleTimeout应用生命周期超时。
JsErrorjs层程序崩溃。
CppCrashnative层程序崩溃。
HighTemperature温度超限。

二、通过HiAppEvent订阅机制获取上次退出原因

2.1 核心能力

      • 订阅接口:hiAppEvent.addWatcher支持订阅hiAppEvent.event.APP_KILLED系统事件 。

      • 数据模型:通过eventInfo.params.reason获取退出原因

2.2 开发实践示例


hiAppEvent.addWatcher({
  // 开发者可以自定义观察者名称,系统会使用名称来标识不同的观察者
  name: "watcher",
  // 开发者可以订阅感兴趣的系统事件,此处是订阅了应用终止事件
  appEventFilters: [
    {
      domain: hiAppEvent.domain.OS,
      names: [hiAppEvent.event.APP_KILLED]
    }
  ],
  // 开发者可以自行实现订阅实时回调函数,以便对订阅获取到的事件数据进行自定义处理
  onReceive: (domain: string, appEventGroups: Array<hiAppEvent.AppEventGroup>) => {
    hilog.info(0x0000, 'testTag', `HiAppEvent onReceive: domain=${domain}`);
    for (const eventGroup of appEventGroups) {
      // 开发者可以根据事件集合中的事件名称区分不同的系统事件
      hilog.info(0x0000, 'testTag', `HiAppEvent eventName=${eventGroup.name}`);
      for (const eventInfo of eventGroup.appEventInfos) {
        // 开发者可以对事件集合中的事件数据进行自定义处理,此处是将事件数据打印在日志中
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.domain=${eventInfo.domain}`);
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.name=${eventInfo.name}`);
        // 开发者可以获取到应用终止事件发生的时间戳
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.params.time=${eventInfo.params['time']}`);
        // 开发者可以获取到应用的前后台状态
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.params.foreground=${eventInfo.params['foreground']}`);
        // 开发者可以获取到应用终止事件发生的原因
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.params.reason=${eventInfo.params['reason']}`);
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.params.app_running_unique_id=${eventInfo.params['app_running_unique_id']}`);
        hilog.info(0x0000, 'testTag', `HiAppEvent eventInfo.params.bundle_version=${eventInfo.params['bundle_version']}`);
      }
    }
  }
});

2.3 数据采集维度


名称类型说明
timenumber事件触发时间,单位为ms。
reasonstring终止原因,原因范围详见 reason字段说明
foregroundboolean应用是否处于前台状态。true表示应用处于前台;false表示应用处于后台。
app_running_unique_idstring应用运行时唯一关联的id。说明:从API version 24开始支持该参数。
bundle_versionstring应用版本信息。说明:从API version 24开始支持该参数。


三、开发案例:崩溃聚类分析实战

3.1 案例背景

      某应用在鸿蒙6.1升级后出现高频崩溃,传统日志分析难以定位共性诱因。通过HiAppEvent订阅机制,开发者获取到以下关键数据:

      • 崩溃类型分布:JS Crash占比62%,CppCrash占比38%。

      • 资源管控诱因:整机内存管控触发的后台进程终止占比75%。

3.2 基本架构

3.3 聚类分析流程

      1. 数据清洗:提取eventInfo.params.reason中的关键词(如RssThresholdKiller、LowMemoryKill)。如果只关注前台应用闪退,则过滤eventInfo.params.foreground

      2. 聚类算法:对崩溃事件reason进行聚类,识别高频模式。

  3. 数据关联,根因定位:针对聚类中心事件,通过app_running_unique_id字段和hiAppEvent.event.APP_CRASH事件日志进行关联。

3.3 修复效果


修复措施崩溃率下降幅度
优化内存分配策略15%
修复Native Memory资源泄漏28%
增加ErrorManger捕获不必要的JsError35%

附:官方文档

   1. 应用终止事件介绍,含订阅示例代码:https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/app-killed-events?zxqy-IT&ha_sourceId=89000468

 2. App Killed(应用终止)检测 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/appkilled-guidelines?zxqy-IT&ha_sourceId=89000468

   3. 应用异常退出类问题检测方法  https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-stability-runtime-exception-exit-detection?zxqy-IT&ha_sourceId=89000468

  4. 应用被查杀类问题分析方法  https://developer.huawei.com/consumer/cn/doc/best-practices/bpta-stability-app-killed-way?zxqy-IT&ha_sourceId=89000468




©本站发布的所有内容,包括但不限于文字、图片、音频、视频、图表、标志、标识、广告、商标、商号、域名、软件、程序等,除特别标明外,均来源于网络或用户投稿,版权归原作者或原出处所有。我们致力于保护原作者版权,若涉及版权问题,请及时联系我们进行处理。
分类
HarmonyOS
头像

鸿蒙小助手

致力于为鸿蒙开发者谋福利

1099

帖子

8

提问

13572

粉丝

关注
热门推荐
地址:北京市朝阳区北三环东路三元桥曙光西里甲1号第三置业A座1508室 商务内容合作QQ:2291221 电话:13391790444或(010)62178877
版权所有:电脑商情信息服务集团 北京赢邦策略咨询有限责任公司
声明:本媒体部分图片、文章来源于网络,版权归原作者所有,我司致力于保护作者版权,如有侵权,请与我司联系删除

京ICP备:2022009079号-2

京公网安备:11010502051901号

ICP证:京B2-20230255