Android日志源码——ANR调用流程(五)

        前面已经介绍了 ANR 相关日志的分析。这里我们来看一下,当 ANR 发生的时候,系统调用那些关键的函数代码,来将系统当前的关键信息保存到日志当中。

一、ANR场景

        以下常见场景都会触发 ANR 异常。

ServiceTimeout:比如前台服务在 20s 内未执行完成。

BroadcastQueueTimeout:比如前台广播在 10s 内未执行完成。

InputDispatchingTimeout::输入事件分发超时 5s,包括按键和触摸事件。

ServiceTimeout 

源码位置:/frameworks/base/services/core/java/com/android/server/am/ActiveServices.java

void serviceTimeout(ProcessRecord proc) {
    String anrMessage = null;
    synchronized(mAm) {
        ……
        ServiceRecord timeout = null;
        long nextTime = 0;
        for (int i = psr.numberOfExecutingServices() - 1; i >= 0; i--) {
            ServiceRecord sr = psr.getExecutingServiceAt(i);
            if (sr.executingStart < maxTime) {
                timeout = sr;
                break;
            }
            if 

猜你喜欢

转载自blog.csdn.net/c19344881x/article/details/131578852