什么是ANR


ANR:Application Not Responding。

在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android 就会显示 ANR 对话框了:

用户对应用程序的操作(如输入事件,按键、触摸屏事件)在5秒内无响应

广播接受器(BroadcastReceiver)在10秒内仍未执行完毕


Android 应用程序完全运行在一个独立的线程中(例如 main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR。因为此时,你的应用程序已经没有机会去响应输入事件和意向广播(Intentbroadcast)。

避免方法:Activity 应该在它的关键生命周期方法(如 onCreate()和 onResume())里尽可能少的去做创建操作,潜在的耗时操作。例如网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里(或者异步方式)来完成。


主线程应该为子线程提供一个 Handler,以便完成时能够提交给主线程。
原创文章 19 获赞 4 访问量 2万+

猜你喜欢

转载自blog.csdn.net/whyareusomw/article/details/52997192
ANR