Watchdog工作流程

本文详细解析了Android系统的Watchdog工作流程,从SystemServer.startOtherServices开始,介绍Watchdog的初始化、HandlerChecker的调度与运行,以及如何通过监控HandlerChecker的完成状态来判断系统是否正常。在超时时,Watchdog会执行一系列操作,如dump堆栈轨迹、kernel日志等,以确保系统稳定运行。
摘要由CSDN通过智能技术生成

WatchDog工作原理

[基于 Android P]

先看下MTK关于watchdog原理解释:
在这里插入图片描述
这个只是我们学习前的一个概论,具体代码详解如下。

1. SystemServer.startOtherServices

private void startOtherServices() {
	final Context context = mSystemContext;
	...
	try{
		...
		traceBeginAndSlog("InitWatchdog");
		//【2】实例化
        final Watchdog watchdog = Watchdog.getInstance();
		//【3】初始化
        watchdog.init(context, mActivityManagerService);
        traceEnd();
		...
	    traceBeginAndSlog("StartWatchdog");
		//【4】启动
        Watchdog.getInstance().start();
        traceEnd();
		...
	}catch (RuntimeException e) {
        Slog.e("System", "******************************************");
        Slog.e("System", "************ Failure starting core service", e);
    }
	...
       
}

Watchdog继承Thread类,使用单例模式实例化,调用自身init方法初始化。

2. Watchdog.getInstance

public static Watchdog getInstance() {
    if (sWatchdog == null) {
        sWatchdog = new Watchdog();
    }
    return sWatchdog;
}

实例化watchdog

2.1. Watchdog.Watchdog
private Watchdog() {
    super("watchdog");
    // 为我们要检查的每个公共线程初始化处理程序检查器。
    // 请注意,我们当前没有检查后台线程,
    // 因为它可能会保留更长时间的运行操作,
    // 而不保证其中的操作的及时性。

    // 添加android.fg线程监控
    mMonitorChecker = new HandlerChecker(FgThread.getHandler(),
            "foreground thread", DEFAULT_TIMEOUT);
    mHandlerCheckers.add(mMonitorChecker);
    // 添加 main 线程监控器
    mHandlerCheckers.add(new HandlerChecker(new Handler(Looper.getMainLooper()),
            "main thread", DEFAULT_TIMEOUT));
    // 添加android.ui线程监控
    mHandlerCheckers.add(new HandlerChecker(UiThread.getHandler(),
            "ui thread", DEFAULT_TIMEOUT));
    // 添加android.io线程监控
    mHandlerCheckers.add(new HandlerChecker(IoThread.getHandler(),
            "i/o thread", DEFAULT_TIMEOUT));
    // 添加android.display线程监控
    mHandlerCheckers.add(new HandlerChecker(DisplayThread.getHandler(),
            "display thread", DEFAULT_TIMEOUT));

    // 初始化binder线程监控
    addMonitor(new BinderThreadMonitor());
	// 加载fd 监控 open次数保存在/proc/self/fd/中
    mOpenFdMonitor = OpenFdMonitor.create();

    // See the notes on DEFAULT_TIMEOUT.
    assert DB ||
            DEFAULT_TIMEOUT > ZygoteConnectionConstants.WRAPPED_PID_TIMEOUT_MILLIS;
}

3. Watchdog.init

public void init(Context context, ActivityManagerService activity) {
    mResolver = context.getContentResolver();
    mActivity = activity;

    context.registerReceiver(new RebootRequestReceiver(),
            new IntentFilter(Intent.ACTION_REBOOT),
            android.Manifest.permission.REBOOT, null);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值