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。

)

posted @ 2011-12-16 10:01  lotushy  阅读(610)  评论(0编辑  收藏  举报