Android中的ANR
ANR的全称是Application Not Responding。触发ANR的主要原因是UI主线程被阻塞。
以下是Android中检测ANR的位置:
ActivityManagerService中 ANR的检测:
broadcastTimeout
serviceTimeout
在broadcastreceiver的onReceive方法中不要show dialog,不要bind a service。前者用notification替代,后者用startservice替代。
如果你需要在broadcastreceiver中做long time的操作,那么你需要使用service。这可以保持进程活着,不会被系统认为是empty进程,直到操作结束。
WindowManagerService中ANR的检测:
keyEvent timeout(
KeyWaiter.waitForNextEventTarget中,定义了dispatch timeout为5*1000
KeyWaiter. finishedKey用于唤醒所有等待dispatch key。
)