ANR是Application Not Responding的简称,当android某个应用处于长期假死状态时,系统会弹出一个窗口: XXX is not responding, force close or wait。

用户可以选择wait让程序继续运行,在程序里对响应性能的设计很重要,这样系统不会显示ANR给用户。

1 ANR的产生

应用程序的响应性是由Activity Manager和Window Manager系统服务监视的。当它监测到以下情况中的一个时,Android就会针对特定的应用程序显示ANR:

在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸)
BroadcastReceiver在10秒内没有执行完毕

上面的时间在系统里定义的

2 如何避免ANR

运行在主线程里的任何方法都尽可能少做事情。Activity应该在它的关键生命周期方法(如onCreate()和onResume())里尽可能少的去做创建操作。网络或数据库操作,或者高耗时的计算如改变位图尺寸,应该在子线程里来完成或这用异步请求的方式。主线程应该为子线程提供一个Handler,以便完成时能够提交给主线程。IntentReceiver执行时间的特殊限制意味着它应该做小的、琐碎的工作如保存设定或者注册一个Notification,应用程序应该避免在BroadcastReceiver里做耗时的动作。但不再是在子线程里做这些任务(因为BroadcastReceiver的生命周期短),如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service。如果应用程序在响应Intent广播时需要向用户展示什么,你应该使用Notification Manager来实现。

更多相关文章

  1. 浅谈Android(安卓)ANR在线监控原理
  2. Android应用程序管理
  3. Android中的传感器
  4. Android(安卓)Display System -- Surface Flinger
  5. Android(安卓)UI界面刷新与交互
  6. 在 Android(安卓)上使用 XML
  7. Android开发笔记(一)
  8. Android(安卓)Activity 和 Task 设计指导(SDK)
  9. 2、Android应用程序基本特性

随机推荐

  1. Android(安卓)ViewPager+Fragment实现首
  2. android读写Sdcard
  3. Android拍照Demo
  4. android WebView 回退与退出
  5. Android(安卓)Studio Tips & Tricks: Mov
  6. android中设置进度条读取
  7. Android(安卓)coredump
  8. implement drag and drop on android
  9. Android中的访问权限
  10. Android(安卓)OnGestureListener