Android 系统奔溃触发WatchDog分析

public List getHardwareList() {

    synchronized (mLock) {

        return Collections.unmodifiableList(mHardwareList);

    }

}



那这个锁被谁持有呢?现在只看Android log已经无能为力了,需要分析trace文件,做过app开发的应该都经常遇到anr,遇到anr一般都需要分析trace文件, 这个trace文件在/data/anr/目录下。我们知道触发ANR,dump trace文件的场景如下:



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

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

ContentProvider Timeout:内容提供者,在publish过超时10s  

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



其实还有一种情况也会生成trace文件,那就是触发Framework的Watchdog的时候。看一下Watchdog.java的run方法,符合条件时,会触发dump trace的操作。  

//frameworks/base/services/core/java/com/android/server/Watchdog.java



@Override

public void run() {

  ···

if (!fdLimitTriggered) {

                final int waitState = evaluateCheckerCompletionLocked();

                if (waitState == COMPLETED) {

                    // The monitors have returned; reset

                    waitedHalf = false;

                    continue;

                } else if (waitState == WAITING) {

                    // still waiting but within their configured intervals; back off and recheck

                    continue;

                } else if (waitState == WAITED_HALF) {

                    if (!waitedHalf) {

                        Slog.i(TAG, "WAITED_HALF");

                        // We've waited half the deadlock-detection interval.  Pull a stack

                        // trace and wait another half.

                        ArrayList<Integer> pids = new ArrayList<>(mInterestingJavaPids);

                      //dump trace文件

                        ActivityManagerService.dumpStackTraces(pids, null, null,

                                getInterestingNativePids(), null);

                  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值