外观
卡顿和 ANR 怎么区分与定位?
标准回答
卡顿是画面或交互没能按期更新;ANR 是应用在特定系统检测场景下未及时响应。二者可能同源,但卡顿不一定达到 ANR。
关键机制
- 卡顿先看 Trace 的主线程、RenderThread、GPU 和 FrameTimeline,区分计算重、IO、锁、Binder 等待与调度不及时。
- ANR 结合原因、主线程堆栈和相关线程一起分析;主线程在等锁时,要继续追持锁线程。
- 60Hz 的帧间隔约 16.7ms,120Hz 约 8.3ms;这是刷新节奏参考,不是每个阶段都能独占完整时间。
通俗例子
主线程堆栈显示等待 Binder,不代表客户端没有责任。继续看服务端是否持锁、是否同步读硬件,以及调用能否异步化。
易混淆点
不同 ANR 类型、版本和前后台场景阈值不同,不能统一回答“超过 5 秒都是 ANR”。
参考资料
内容来源
- Android 技术札记 · 原条目
jank