ANR -- Application Not Responding 应用程序未响应。
默认情况下,在Android中Activity的最长执行时间是5s,Broadcast Receiver则是10s
一、ANR引发原因
在Android中,应用程序的响应事件是由 Activity Manager 和 WindowManager 系统服务监视的 。
当它监测到以下情况中的一个时,Android就会针对特定的应用程序跳出ANR对话框:
1. 输入事件在5s内没有得到响应
2. Broadcast Receiver在10s内没有执行完毕
一般来说,造成以上两种情况的原因很多,例如:在UI线程中进行了很耗时的操作(下载,IO异常等)
再比如:
网络交互或数据库操作
很耗时的逻辑运算
这些操作本该在子线程中、以异步请求的方式来完成。
因此,解决办法是:
主线程应为子线程提供一个Handler机制,完成时能返回至主线程。
二、避免ANR
1. UI线程中尽量少做一些耗时的事情,特别是在Activity的onCreate()和onResume()方法中。
2.如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个后台Service。
3.避免在Intent Receiver中启动一个Activity,因为它会创建一个新的界面,并从当前运行界面上抢夺焦点。
如果需要在响应Intent广播时与用户交互的话,应该使用Notification Manager来实现。