Android系统服务之看门狗.ppt

  1. 1、本文档共10页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android系统服务之看门狗

内部公开 * Android系统服务之看门狗 本文中所有信息归上海斐讯通信技术有限公司所有,未经允许,不得外传 秘密▲ 现在的CPU基本上都带有WatchDog功能,这种硬件的WatchDog可以在系统死掉(死锁或者程序跑飞)后重启系统,让系统回到可以工作的状态。WatchDog不能防止系统死掉,但是它能够起死回生,从而提高系统的可用性。 硬件级的WatchDog也有它的局限性,它只能在系统范围内生效,不能针对单个进程,某个进程死掉了,WatchDog未必知道。对于像Linux这类久经考验的操作系统来说,整个系统死掉概率非常低,所以此时硬件级的WatchDog意义反而不大。 秘密▲ * Android 平台实现了一个软件的WatchDog来监护SystemServer。SystemServer无疑是Android平台中最重要的进程了,里面运行了整个平台中绝大多数的服务。在这个进程中运行着近50个线程,任何一个线程死掉都可能导致整个系统死掉。SystemServer退出反而问题不大,因为 init进程会重新启动它,但是它死锁就麻烦了,因为整个系统就没法动了。 Android WatchDog主要作用: 1)接收系统内部reboot请求,重启系统。 2)监护SystemServer进程,防止系统死锁。 本文中所有信息归上海斐讯通信技术有限公司所有,未经允许,不得外传 * 秘密▲ Watchdog是在SystemServer进程中被初始化和启动的。在SystemServer?被Start时,各种Android服务被注册和启动,其中也包括了Watchdog的初始化和启动。代码如下: Slog.i(TAG, Init Watchdog); Watchdog.getInstance().init(context, battery, power, alarm, ActivityManagerService.self()); .在SystemServer?Run函数的后半段,将检查系统是否已经准备好运行第三方代码,并通过SystemReady接口通知系统已经就绪。在ActivityManagerService的SystemReady接口的CallBack函数中实现Watchdog的启动 Watchdog.getInstance().start(); Android Watchdog启动 本文中所有信息归上海斐讯通信技术有限公司所有,未经允许,不得外传 * 秘密▲ Watchdog使用方法 在 SystemServer里运行的服务中,最重要的几个服务应该数ActivityManager、WindowManager、 PowerManager 、InputManager、MountService(未启用)、NetworkManagementService。软件的WatchDog主要就是确保这几个服务发生死锁之后,退出SystemServer进程,让init进程重启它,让系统回到可用状态。 每个被监护的Service必须实现Watchdog.Monitor接口,这个接口只要实现一个函数monitor,这个函数实现非常简单,就拿ActivityManager来说: public void monitor() { synchronized (this) { } } 它去锁一下对象,什么也不做,然后就返回。如果对象没有死锁,这个过程就会很顺利。如果对象死锁了,这个函数就会挂在这里。 当然实现Watchdog.Monitor接口还不够,还要把它注册到WatchDog服务中,在初始化时加这样一行代码就行了: Watchdog.getInstance().addMonitor(this); 本文中所有信息归上海斐讯通信技术有限公司所有,未经允许,不得外传 * * 秘密▲ 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进程。 Watchdog实现机制 本文中所有信息归上海斐讯通信技术有限公司所有,未经允许,不得外传 * 秘密▲ if (!Debug.isDebuggerConnected()) { Sl

文档评论(0)

sh4125733 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档