Android中的ANR

it2024-10-01  22

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。

)

转载于:https://www.cnblogs.com/lotushy/archive/2011/12/16/2289789.html

最新回复(0)