个人随笔,鸿蒙 ErrorManager助力高效应对AppFreeze问题 做鸿蒙开发的朋友,大概都收到过这类用户反馈:"点了没反应,但App没闪退"。界面像被定格了一样,应用还活着,就是不响应。这种卡住但不崩溃的情况,就是AppFreeze(应用冻屏)。 华为开发者联盟 AppFreezeErrorManager鸿蒙系统
个人随笔,鸿蒙 AppFreeze案例:FFRT 与 std::mutex 混用导致的死锁分析 近期,某三方应用在鸿蒙系统上发生了多例 AppFreeze(应用无响应)事件。系统检测到主线程超时阻塞,强制终止了应用。通过抓取 AppFreeze 日志并结合 FFRT(Function Flow Runtime Kit)的基础理论,我们定位到了导致这一现象的根本原因:在 FFRT 并发模型中错误地使用了 C++ 标准库同步原语(std::mutex 和 std::condition_variable),导致 FFRT Worker 线程陷入内核态阻塞,进而引发任务堆积和死锁。 华为开发者联盟 AppFreeze鸿蒙系统
个人随笔,鸿蒙 AppFreeze依靠3s和6s堆栈“热点函数”定位主线程繁忙型卡死 本系列实战第七篇,我们将分析一个更具有挑战性的场景:3s/6s栈不一致且没有增强采样日志,如何定位Appfreeze问题。 华为开发者联盟 AppFreeze主线程卡死鸿蒙系统
个人随笔,鸿蒙 AppFreeze采样栈定位“循环处理计算任务”,解决鸿蒙主线程超时问题 前文我们分享了“锁竞争”、“UI渲染过载”及“主线程同步IO阻塞”引发无响应问题的分析方法。这一篇,我们将介绍另一种无响应故障模式:“主线程执行耗时循环计算”。 华为开发者联盟 AppFreeze主线程超时鸿蒙系统
个人随笔,鸿蒙 AppFreeze采样栈定位“IO阻塞”,解决鸿蒙应用中同步读写主线程超时问题 前面分享了“锁竞争”和“UI 渲染过载”导致冻屏的问题,这一篇将探讨“IO 阻塞”引发的冻屏问题。在鸿蒙应用开发中,如果在主线程执行同步文件读写操作,可能会阻塞主线程,导致应用卡顿甚至被系统杀死。本文将分析如何利用采样栈分析同步 IO 阻塞造成的AppFreeze问题。 华为开发者联盟 AppFreeze鸿蒙系统
个人随笔,鸿蒙 AppFreeze采样栈定位“UI 渲染过载”,找出鸿蒙应用中主线程卡顿根因 上一篇讲了用AppFreeze 定位“锁竞争”引发的冻屏问题,这一篇将分析“UI 渲染过载”引发的冻屏问题。在 ArkUI 开发中,频繁的状态更新(State Update)和列表刷新(ForEach/LazyForEach)会导致主线程陷入密集的 Diff 计算和渲染任务,从而引发卡顿。本文将介绍如何利用采样栈识别 UI 渲染热点。 华为开发者联盟 AppFreezeUI 渲染过载鸿蒙系统