跳到主要内容

应用冻屏事件介绍

简介

用户在使用应用时,如果出现点击无反应或应用无响应等情况,并且持续时间超过一定限制,就会被定义为应用冻屏,也被称为应用无响应。为了应对应用冻屏问题,系统会提供应用冻屏检测、维测日志抓取、日志上报的能力,为开发者提供详细的维测日志以辅助故障定位。

本文面向开发者介绍AppFreeze(应用冻屏)检测原理,以及各字段的含义和规格。如需了解如何使用HiAppEvent接口订阅应用冻屏事件,请参考以下文档。目前提供ArkTS和C/C++两种接口,按需选择。

应用冻屏事件支持在应用分身场景下使用 HiAppEvent 进行订阅,支持在元服务场景下使用HiAppEvent 进行订阅,从 API version 22 开始支持在输入法应用场景下使用 HiAppEvent 进行订阅。

检测原理

详见AppFreeze(应用冻屏)检测原理

事件字段说明

params字段说明

应用无响应事件信息中params属性的详细描述如下:

名称类型说明
timenumber事件触发时间,单位为ms。
foregroundboolean应用是否处于前台状态。true表示应用处于前台;false表示应用处于后台。
release_typestring应用的版本类型。release表示应用为release版本应用,debug表示应用为debug版本应用说明:从API version 23开始支持
cpu_abistring二进制接口类型。 说明:从API version 23开始支持。
bundle_versionstring应用版本。
bundle_namestring应用名称。
process_namestring应用的进程名称。
pidnumber应用的进程ID。
uidnumber应用的用户ID。
uuidstring根据故障信息生成的故障特征码,用于标识特征相同的崩溃故障。
exceptionobject异常信息,详见exception属性。
hilogstring[]日志信息。当生成应用无响应事件日志时,从hilog缓冲区中获取最多100行故障进程日志信息。
event_handlerstring[]主线程未处理消息。
event_handler_size_3sstringTHREAD_BLOCK_6S事件(仅在应用无响应事件生效)中3s时任务栈中任务数量。
event_handler_size_6sstringTHREAD_BLOCK_6S事件(仅在应用无响应事件生效)中6s时任务栈中任务数量。
peer_binderstring[]binder调用信息。
threadsobject[]全量线程调用栈,详见thread属性。
memoryobject内存信息,详见memory属性。
external_log12+string[]故障日志文件路径。为避免目录空间超限(参考log_over_limit),导致新生成的日志文件写入失败,日志文件处理完后请及时删除。
log_over_limit12+boolean生成的故障日志文件与已存在的日志文件总大小是否超过5M上限。true表示超过上限,日志写入失败;false表示未超过上限。
process_life_timenumber故障进程存活时间。 说明:从API 22开始支持。

exception字段说明

名称类型说明
namestring异常类型
messagestring异常原因

thread字段说明

名称类型说明
thread_namestring线程名。
tidnumber线程id。
framesobject[]线程调用栈,详见frame属性。
statestring线程运行状态。读取自/proc/pid/stat的state的值。 说明:从API version 23开始支持。
utimenumber线程在用户态下消耗的CPU的嘀嗒数。读取自/proc/pid/stat的utime的值。 说明:从API version 23开始支持。
stimenumber线程在内核态下消耗的CPU的嘀嗒数。读取自/proc/pid/stat的stime的值。 说明:从API version 23开始支持。
prioritynumber实时优先级。读取自/proc/pid/stat的priority的值。 说明:从API version 23开始支持。
nicenumber静态优先级。读取自/proc/pid/stat的nice的值。 说明:从API version 23开始支持。
clknumber每秒的时钟嘀嗒次数。使用sysconf(_SC_CLK_TCK)获取,获取失败时使用默认值100。通过嘀嗒数除以该值可以计算得到运行时间(单位:秒)。 说明:从API version 23开始支持。

frame字段说明

Native帧frame字段说明

名称类型说明
symbolstring函数名称。名称长度超过256字节时将被删除,防止超长字符串引起未知问题。
filestring文件名。
buildIdstring文件唯一标识。文件可能没有buildId
pcstring程序执行的指令在文件内的偏移十六进制字节数。
offsetnumber程序执行的指令在函数内偏移字节数。

详细说明请参见调用栈帧内容说明

Js帧frame字段说明

名称类型说明
filestring文件名
packageNamestring模块的包名
symbolstring函数名称
linenumber代码行号
columnnumber代码列号

详细说明请参见JS混合栈帧内容说明

memory字段说明

名称类型说明
rssnumber进程实际占用内存大小,单位KB。对应Appfreeze日志中Process Memory(kB)字段。
vssnumber进程向系统申请的虚拟内存大小,单位KB。
pssnumber进程实际使用的物理内存大小,单位KB。
sys_free_memnumber空闲内存大小,单位KB。对应Appfreeze日志中Device Memory(kB)字段的Free。
sys_avail_memnumber可用内存大小,单位KB。对应Appfreeze日志中Device Memory(kB)字段的Available。
sys_total_memnumber总内存大小,单位KB。对应Appfreeze日志中Device Memory(kB)字段的Total。
vm_heap_total_sizenumber主虚拟机总堆内存大小,单位KB。 说明:从API 22开始支持。
vm_heap_used_sizenumber主虚拟机的生命周期过程中,持续统计存活对象的大小,单位KB。 说明:从API 22开始支持。

应用冻屏规格自定义参数设置

接口说明

接口名描述
setEventParam(params: Record<string, ParamType>, domain: string, name?: string): Promise<void>应用冻屏事件自定义参数设置方法。

参数设置说明

开发者可以通过该接口订阅name为hiAppEvent.event.APP_FREEZE的应用冻屏事件,具体使用详见setEventParam使用