接下来看evaluateCheckerCompletionLocked函数:
private int evaluateCheckerCompletionLocked() {
int state = COMPLETED;
for (int i=0; i<
mHandlerCheckers.size(); i++) {
HandlerChecker hc = mHandlerCheckers.get(i);
state = Math.max(state, hc.getCompletionStateLocked());
}
return state;
}
接着看getCompletionStateLocked函数:
public int getCompletionStateLocked() {
if (mCompleted) {//此次检查通过
return COMPLETED;
} else {
long latency = SystemClock.uptimeMillis() - mStartTime;
if (latency < mWaitMax/2) {//时间过了不到一半
return WAITING;
} else if (latency < mWaitMax) {//时间超过一半
return WAITED_HALF;
}
}
return OVERDUE;//超时
}
常量定义:
static final int COMPLETED = 0;
static final int WAITING = 1;
static final int WAITED_HALF = 2;
static final int OVERDUE = 3;
evaluateCheckerCompletionLocked中 state = Math.max(state, hc.getCompletionStateLocked());那么,如果超时,会返回OVERDUE
就会往下执行到blockedCheckers = getBlockedCheckersLocked();
看getBlockedCheckersLocked这个函数:
private ArrayList getBlockedCheckersLocked() {
ArrayList checkers = new ArrayList();
for (int i=0; i<
mHandlerCheckers.size(); i++) {
HandlerChecker hc = mHandlerCheckers.get(i);
if (hc.isOverdueLocked()) {
checkers.add(hc);
}
}
return checkers;
}
这个函数用来收集所有超时的对象,只是用来输出LOG用的。因为超时的对象只要一个就达到重启系统的触发条件了。
然后就是要重启系统并自杀了。