`
java-admin
  • 浏览: 1365175 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

Android中的WatchDog

阅读更多

Android中的WatchDog

<!-- lixianjing added -->

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli@gmail.com>

 

现在的CPU基本上都带有WatchDog功能,这种硬件的WatchDog可以在系统死掉(死锁或者程序跑飞)后重启系统,让系统回到可以工作的状态。WatchDog不能防止系统死掉,但是它能够起死回生,从而提高系统的可用性。

硬件级的WatchDog也有它的局限性,它只能在系统范围内生效,不能针对单个进程,某个进程死掉了,WatchDog未必知道。对于像Linux这类久经考验的操作系统来说,整个系统死掉概率非常低,所以此时硬件级的WatchDog意义反而不大。

Android 平台实现了一个软件的WatchDog来监护SystemServer。SystemServer无疑是Android平台中最重要的进程了,里面运行了整个平台中绝大多数的服务。在这个进程中运行着近50个线程,任何一个线程死掉都可能导致整个系统死掉。SystemServer退出反而问题不大,因为 init进程会重新启动它,但是它死锁就麻烦了,因为整个系统就没法动了。

在 SystemServer里运行的服务中,最重要的几个服务应该数ActivityManager、WindowManager和 PowerManager。软件的WatchDog主要就是确保这几个服务发生死锁之后,退出SystemServer进程,让init进程重启它,让系统回到可用状态。

每个被监护的Service必须实现Watchdog.Monitor接口,这个接口只要实现一个函数monitor,这个函数实现非常简单,就拿ActivityManager来说吧:

public void monitor() {
       synchronized (this) { }
    }

它去锁一下对象,什么也不做,然后就返回。如果对象没有死锁,这个过程就会很顺利。如果对象死锁了,这个函数就会挂在这里。

当然实现Watchdog.Monitor接口还不够,还要把它注册到WatchDog服务中,在初始化时加这样一行代码就行了:

Watchdog.getInstance().addMonitor(this);

最后我们看看WatchDog服务的实现。WatchDog服务包括两个方面:

1.定期调用被监护对象的monitor函数,这是在主线程中完成的。如果被监护对象死锁,则会阻塞在这里。

                   final int size = mMonitors.size();
                   for (int i = 0 ; i < size ; i++) {
                       mCurrentMonitor = mMonitors.get(i);
                       mCurrentMonitor.monitor();
                   }

2.检测是否发生死锁,这是在Watchdog线程中运行的。如果发生死锁而且没有被调试,则退出SystemServer,init进程就会重启SystemServer进程。

           // Only kill the process if the debugger is not attached.
           if (!Debug.isDebuggerConnected()) {
               Slog.w(TAG, "*** WATCHDOG KILLING SYSTEM PROCESS: " + name);
               Process.killProcess(Process.myPid());
               System.exit(10);
           } else {
               Slog.w(TAG, "Debugger connected: Watchdog is *not* killing the system process");
           }

最近我们碰到一个问题,SystemServer不断重启:原来wifi模块死锁了,此时重启SystemServer,但是重启之后马上又死锁了,结果成了一个死循环。在这种情况下,我想还是在重启系统会好点。

 

 

 

http://www.limodev.cn/blog/archives/1566


分享到:
评论

相关推荐

    Android-ANR-WatchDog一个用于检测AndroidANR(应用不响应)的watchdog

    一个简单的看门狗,它检测Android ANR(应用程序不响应)错误,并抛出一个有意义的异常

    android Watchdog 实现剖析

    Android提供了Watchdog类,用来监测Service是否处于正常工作中,是在SystemServer中启动的;本文将详细介绍

    Android SW-watchdog_introduction

    Android SW-watchdog_introduction,比较详细的原理说明介绍,深刻理解sw watchdog以及分析方法。

    ACT8864 watchdog patch for Android.zip

    ACT8864 watchdog patch for Android

    ANR-WatchDog,安卓系统.zip

    检测android anrs(应用程序无响应)的简单看门狗。

    浅谈Android ANR在线监控原理

    Android中的Watchdog 在Android中,Watchdog是用来监测关键服务是否发生了死锁,如果发生了死锁就kill进程,重启SystemServer Android的Watchdog是在SystemServer中进行初始化的,所以Watchdog是运行在...

    ANR-WatchDog:一个简单的看门狗,可检测到Android ANR(应用程序无响应)错误并引发有意义的异常

    android bug跟踪器中有一个问题条目描述了这种不足,请随时给它加注星标;) 它能做什么它设置了一个“看门狗”计时器,该计时器将检测UI线程何时停止响应。 这样做时,所有线程堆栈跟踪(主优先)都会引发错误。 它...

    《深入理解Android:卷I》试读本

    第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    深入理解Android 卷1.pdf

    第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    深入理解Android++卷1pdf电子书

    第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    深入理解Android卷1

    第4章分析了Z ygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    深入理解Android:卷2

    第4章分析了Z ygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    WatchDog.rar

    Python小程序,用于服务器网络通讯状况监控,可生成监控日志 1、代码注释清晰可自行根据需要修改,初学者也可看明白 2、附带操作使用说明

    深入理解Android 卷I

    第4章分析了zygote、systemserver等进程的工作机制,同时还讨论了android的启动速度、虚拟机heapsize的大小调整、watchdog工作原理等问题;第5章讲解了android系统中常用的类,包括sp、wp、refbase、thread等类,...

    深入理解Android:卷I--详细书签版

    第5章讲解了android系统中常用的类,包括sp、wp、refbase、thread等类,同步类,以及java中的handler类和 looper类,掌握这些类的知识后方能在后续的代码分析中做到游刃有余;第6章以mediaserver为切入点,对...

    深入理解Android

    第4章分析了Zygote、SystemServer等进程的工作机制,同时还讨论了Android的启动速度、虚拟机HeapSize的大小调整、Watchdog工作原理等问题;第5章讲解了Android系统中常用的类,包括sp、wp、RefBase、Thread等类,...

    Watchdog:保持您重要的应用程序运行; 无论

    Newtron Watchdog允许您为Android开发的关键应用程序即使在应用程序崩溃后也可以继续运行。 如何使用 步骤1 在您的设备上从Google Play商店( )安装“ Newtron Watchdog”。 第2步 在build.gradle项目中包括以下...

Global site tag (gtag.js) - Google Analytics