接下来看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用的。因为超时的对象只要一个就达到重启系统的触发条件了。
然后就是要重启系统并自杀了。
新闻热点
疑难解答