1:Application Not Responding,即应用无响应
2:出现的原因有三种:
(1)KeyDispatchTimeout(5 seconds)主要类型按键或触摸事件在特定时间内无响应
(2)BroadcastTimeout(10 seconds)BoradcastReceiver在特定的时间内无法处理
(3)ServiceTimeout(20 seconds)小概率类型Service在特定的时间内无法处理完成
3:避免ANR最核心的一点就是在主线程减少耗时操作。通常需要从那个以下几个方案下手:
(1)使用子线程处理耗时IO操作
(2)降低子线程优先级,使用Thread或者HandlerThread时,调用Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND)设置优先级,否则仍然会降低程序响应,因为默认Thread的优先级和主线程相同
(3)使用Handler处理子线程结果,而不是使用Thread.wait()或者Thread.sleep()来阻塞主线程
(4)Activity的onCreate和onResume回调中尽量避免耗时的代码
(5)BroadcastReceiver中onReceiver代码也要尽量减少耗时操作,建议使用intentService处理。intentService是一个异步的,会自动停止的服务,很好解决了传统的Service中处理完耗时操作忘记停止并销毁Service的问题