Android 开发

ANR 之 traces.txt 文件分析

2018-12-04  本文已影响3人  BugFree张瑞

参考文献:

https://www.jianshu.com/p/8964812972be

https://blog.csdn.net/tjy1985/article/details/6777355

http://haiolv.github.io/2016/06/13/android-anr%E5%88%86%E6%9E%90/

ANR 一般有三种类型:

  1. KeyDispatchTimeout(5 seconds) –主要类型按键或触摸事件在特定时间内无响应

  2. BroadcastTimeout(10 seconds) – BroadcastReceiver 在特定时间内无法处理完成

  3. ServiceTimeout(20 seconds) –小概率类型 Service 在特定的时间内无法处理完成

// How long we wait until we timeout on key dispatching.
static final int KEY_DISPATCHING_TIMEOUT = 5*1000;

引起ANR问题的根本原因,总的来说可以归纳为两类:

com.qihoo.browser 进程处理 SIGNAL_QUIT signal, 并把 ANR 信息写入 traces.txt 文件。进程的虚拟机实例接收到 SIGNAL_QUIT 信号后会由 "Signal Catcher" 线程将进程中各个线程的函数堆栈信息输出到 traces.txt 文件中。值得注意的是, 当前运行的其他进程也会把当前的函数堆栈信息输出到 traces.txt 文件中,但发生 ANR 的进程正常情况下会第一个输出,所以一般情况下我们只看 traces.txt 的开头就行了。

framework 是如何输出 ANR 信息到 traces.txt 文件中去的?

ActivityManagerService.java 中的 appNotResponding() 方法:

上一篇下一篇

猜你喜欢

热点阅读