在 Android 中,活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时,Android 就会显示ANR 对话框了:
对输入事件(如按键、触摸屏事件)的响应超过5秒
意向接受器(intentReceiver)超过10秒钟仍未执行完毕
Android 应用程序完全运行在一个独立的线程中(例如 main)。这就意味着,任何在主线程中运行的,需要消耗大量时间的操作都会引发 ANR。因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如 onCreate()和 onResume()等更应如此。潜在的比较耗时的操作(如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小)需要在一个单独的子线程中完成(或者是使用异步请求,如数据库操作)。但这并不意味着主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用 Therad.wait()或者Thread.sleep()方法。