通常,如果应用程序不能响应用户输入,系统将显示ANR对话框。 应用程序响应是由活动管理器服务监控的。当Android检测到以下条件之一时,将显示一个特定应用程序的ANR对话框:
1. 5秒内没有响应输入事件(如按键或触屏事件)。
2. BroadcastReceiver在10秒内没有完成执行(后台广播为60秒)。
3. 启动服务的操作在20秒内未执行完成(后台服务为200秒)
添加logs
1.为了调试输入相关的ANR问题,
In InputDispatcher.cpp,
请在上面加上下面一行
#define LOG_NDEBUG 0
并且,请启用DEBUG_FOCUS和DEBUG_DISPATCH_CYCLE
#define DEBUG_DISPATCH_CYCLE 1
#define DEBUG_FOCUS 1
并且,请在其中添加一些调试日志,打印等待开始时间、等待超时时间和当前时间,如下黄色标记代码:
985int32_t InputDispatcher::handleTargetsNotReadyLocked(nsecs_t currentTime,
986 const EventEntry* entry,
987 const sp<InputApplicationHandle>& applicationHandle,
988 const sp<InputWindowHandle>& windowHandle,
989 nsecs_t* nextWakeupTime, const char* reason) {
……
+ #if DEBUG_FOCUS
+ ALOG