android ANR
2019-06-21 本文已影响0人
莫库施勒
http://gityuan.com/2019/04/06/android-anr/
// TODO
超时时长
Service 是通过Handler 添加超时Message, 执行完成后会remove掉,如果没有remove,就会报ANR
Service 报告流程
ActiveServices.realStartServiceLocked()
bumpServiceExecutingLocked()
scheduleServiceTimeoutLocked()
ActiveServices.serviceTimeout()
mAm.mAppErrors.appNotResponding()
Input ANR
InputDispatcher::dispatchOnceInnerLocked()
findFocusedWindowTargetsLocked()
checkWindowReadyForMoreInputLocked() // 检查窗口是否有能力再接收新的输入事件
InputDispatcher::handleTargetsNotReadyLocked() // 事件5s之内还没有分发完毕,则调用
InputDispatcher::onANRLocked()
NativeInputManager.notifyANR()
InputManagerService.notifyANR()
InputMonitor.notifyANR()
AMS.inputDispatchingTimeOut()
AMS.UiHandler.sendMessage()