Watchdog位于Framework的services包中,运行时由SystemServer初始化,从而运行在ServerThread中。
作用
Watchdog的主要作用是监控SystemServer中一些服务是否发生了死锁或者长时间被Blocked住而不能正常运行。
原理
定期调用被监控者实现的Monitor接口的monitor()方法,等待一定时间(目前4.2上为30s)后检查标识符,通过标识符来检查被监控者是否已经处于异常状态。
实现细节
- Watchdog会在两个周期内(目前4.2上为30s)都调用被监控者的接口,同时检查mCompleted的标识符;只有在连续两个周期内都有被监控者不能正常返回时才会触发后续操作,否则重置状态继续进行下一个周期。
- Watchdog发现被监控者处于不正常状态之后的操作便是杀死当前进程(也就是SystemServer进程,被杀死之后会导致zygote自杀,再之后由init进程重新创建zygote重新启动Framework)。
- 过程中伴随着日志和Stack Traces的输出和写入,具体参见代码。
网友评论