- 看了一下watchdog的源码总结一下
- 基本原理
-
HandlerChecker 是基本的检测类,scheduleCheckLocked里面会记录开始时间并将minitor()检测方法postAtFrontOfQueue到Loop的队列前端,如果30s内没有执行到这个方法说明系统已经卡顿了(正常Loop队列前端的方法应该很快执行),
打印一次ActivityManagerService.dumpStackTraces。如果60s没有执行完 重启 并打印 堆栈信息,重启的目的是重新初始化system_server避免一直卡下去
-
其中monitor方法作为执行的检测办法被各个检测对象实现,大都是一些获取锁的操作,用来检测死锁情况
- 下面是几个类重写的monitor()方法
- ActivityManagerService 只调用了synchronized 用来检测死锁没有其他动作
-
/** In this method we try to acquire our lock to make sure that we have not deadlocked */ public void monitor() { synchronized (this) { } }
-
-
MediaProjectionManagerService 也是检测死锁
-
@Override
publicvoid
-
- ActivityManagerService 只调用了synchronized 用来检测死锁没有其他动作
-
WatchDog源码分析
最新推荐文章于 2024-07-03 18:30:37 发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)