android看门狗流程:
1.看门狗是一个线程,专门检测系统的重要进程有无异常,死锁。如发现,杀死进程
2.看门狗每个一段时间就让检测的进程获取一次锁,如果超时获取不到,则杀死进程
public class ActivityManagerService extends ActivityManagerNative implements Watchdog.Monitor, BatteryStatsImpl.BatteryCallback
通过两步让看门狗看门
Watchdog.getInstance().addMonitor(this); //this 就是指ActivityManagerService
Watchdog.getInstance().addThread(mHandler);
//通过 monitor()方法获取ActivityManagerService 的锁,如果ActivityManagerService 发生死锁的话,则获取不到锁
public void monitor() {
synchronized (this) { }
}
整体流程:
//在一个死循环里面检测
while(true){
//每个线程都去搞一下锁,看能不能搞到锁(每个线程都记住自己开始搞锁的时间mStartTime,有没有搞到锁的标志mCompleted)
for (int i=0; i<mHandlerCheckers.size(); i++) {
HandlerChecker hc = mHandlerCheckers.get(i);
hc.scheduleCheckLocked();//去搞锁
}
上面每个线程开始搞锁之后,就休息30s,30s后查看他们有没有搞到锁
sleep(30000);休息30s
30s过去了,要收卷了,看各个线程搞到锁没有,没有搞到锁的话就悲剧了,手机会自动重启
final int waitState = evaluateCheckerCompletionLocked();
} //while循环结束