Skip to content
阅读进度

如何通过 trace.txt 文件分析 ANR 的主线程阻塞点? ​

返回 性能与稳定性 目录

标准回答 ​

ANR 堆栈是一张现场照片,先看主线程停在哪,再追它等的锁、线程或远端服务。

  • 查时间、进程、Reason,并匹配同一事件的日志与 Trace。
  • 区分计算、监视器锁、IO、Binder 等等待类型。
  • 若栈为 nativePollOnce,要考虑采样过晚或触发原因并非此刻主线程忙。

通俗例子 ​

主线程显示等待 monitor,就找谁持有这把锁;若等待 Binder 返回,还要查服务端。结合 Trace 更能还原事件发生顺序。

深入解释 ​

**堆栈能告诉你什么:**快照显示线程在采样时执行或等待的位置。main 卡在锁上时,还应看锁由谁持有;卡在 Binder 时,需要继续看远端处理。

**快照为什么不是完整答案:**采集时刻可能晚于真正卡顿起点,甚至问题已经暂时缓解。结合触发原因、日志和 Trace 才能区分根因与恰好被采到的现场。

易混淆点 ​

单个栈快照不是完整时间线;看到 idle 栈不能直接认定是 Looper 导致。

参考资料 ​

内容来源 ​

用完整回答理解机制,用真实证据解释项目。