在HarmonyOS应用开发中,主线程(UI线程)主要负责UI的构建、刷新以及响应用户的输入事件(如点击、滑动)。
分析appfreeze日志可以按以下步骤进行:
在日志头部确认EVENTNAME为APP_INPUT_BLOCK,并记录TIMESTAMP(例如:2026/01/06-17:45:08)。
DOMAIN = AAFWK EVENTNAME = APP_INPUT_BLOCK TIMESTAMP = 2026/01/06-17:45:08:167 PID = 20289 UID = 20020212 TID = 20289 PACKAGE_NAME = com.jd.app.reader.hos PROCESS_NAME = com.jd.app.reader.hos
Current Running: start at 2026-01-06 17:44:59.785...
Fault time: 2026-01-06 17:45:05...
// 耗时约6秒
Current Running: start at 2026-01-06 17:44:59.785, Event { send thread = 20580, send time = 2026-01-06 17:44:59.778, handle time = 2026-01-06 17:44:59.778, trigger time = 2026-01-06 17:44:59.785, task name = uv_io_cb, caller = [ohos_js_environment_impl.cpp(PostTaskToHandler:70)] } 查找Catche stack trace部分,重点关注主线程(Tid与Pid相同)的堆栈。
例如日志中显示:
#01 at anonymous (bookshelf|src/main/ets/BookShelfModule.ts:766:1) #02 pc ... BuiltinStub_ArrayFindIndexStwCopy... // 正在执行查找 #04 at anonymous (bookshelf|src/main/ets/BookShelfModule.ts:765:42) #05 pc ... BuiltinStub_ArrayForEachStwCopy... // 正在执行遍历
这表明在BookShelfModule.ts的第764-766行,存在forEach循环内部嵌套findIndex的操作。