咨询热线

什么是ANR 如何避免它?

发布时间:2016-06-13 17:10:31

什么是ANR 如何避免它?西安Android培训开发告诉你:ANR:Application NotResponding,五秒

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

对输入事件(如按键、触摸屏事件)的响应超过5秒

意向接受器(intentReceiver)超过10秒钟仍未执行完毕

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

因此,任何运行在主线程中的方法,都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如onCreate()和 onResume()等更应如此。潜在的比较耗时的操作,如访问网络和数据库;或者是开销很大的计算,比如改变位图的大小,需要在一个单独的子线程中完成 (或者是使用异步请求,如数据库操作)。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 -- 也不需要调用Therad.wait()或者Thread.sleep()方法。取而代之的是,主线程为子线程提供一个句柄(Handler),让子线程 在即将结束的时候调用它(xing:可以参看Snake的例子,这种方法与以前我们所接触的有所不同)。使用这种方法涉及你的应用程序,能够保证你的程序 对输入保持良好的响应,从而避免因为输入事件超过5秒钟不被处理而产生的ANR。这种实践需要应用到所有显示用户界面的线程,因为他们都面临着同样的超时 问题。


蓝鸥独创“FCBS”实训体系,(Foundation基础+ Career职业+ Breakthrough 突破+ Solution 解决方案),颠覆了移动互联网研发培训行业“喂奶式”的教学模式,以真实的企业级项目打造高薪技术人才。到目前为止,蓝鸥已经与5000多家企业和 700多所高等院校展开合作;并在苹果App Store上线项目超过1000款;为企业输送11000多名高级开发工程师。 


蓝鸥秉承 “让教育回归本质”的理念,强化责任心,严把质量关,实行封闭式管理,采取严格的考核和测评机制。蓝鸥高品质的服务赢得了社会各界的广泛关注和国家高度赞誉。