“ANR”是一个例外还是一个错误还是什么?

ANR是一个例外,一个错误还是什么? 我们可以通过try{} catch(){}结构来捕捉它吗?

  • java.lang.UnsupportedOperationException:在AdapterView中不支持addView(View,LayoutParams)
  • Androidexception:你忘了调用“公共无效设置(LocalActivityManager activityGroup)”
  • 终结者引发的未捕获exception:Google API bug或三星内核bug?
  • pointerIndex超出范围Android多点触控
  • 在android中pollduring alarm illegalstateexception是什么意思
  • java.lang.SecurityException:需要READ_PHONE_STATE:无论是用户10210还是当前的进程..仅在HTC手机中
  • 尝试在NotepadV1示例中加载资源时“资源未find”exception
  • Android:无法实例化活动/ ClassNotFoundException
  • ANR (应用程序没有响应)不完全是一个错误。 当您的应用程序非常缓慢并且需要大量时间来响应时才会显示,从而使用户等待。 如果您的应用程序等待很长时间,用户将不会感激。 所以,Android框架为用户提供了closures应用程序的选项。 http://developer.android.com/guide/practices/design/responsiveness.html

    当您在主线程上执行长时间运行操作时,会发生这种情况。 由于主线程被阻塞,系统在此期间无法处理用户交互。 解决方法是在工作线程中执行繁重的操作,并保持主线程空闲。

    应用程序不响应(ANR)对话框

    正如你可以想象的,如果主线程忙于大量计算或者从networking套接字读取数据,它不能立即响应用户input,例如轻击或滑动。

    对用户交互没有快速响应的应用程序将感觉不到响应 – 任何超过几百毫秒的延迟都是显而易见的。 这是一个有害的问题,Android平台可以保护用户免受在主线程上做太多的应用程序的侵害。

    注意 :

    如果应用程序在5秒内没有响应用户input,用户将看到“应用程序不响应”(ANR)对话框,并将提供退出应用程序的选项。

    以下屏幕截图显示了一个典型的Android ANR对话框:

    在这里输入图像说明

    Android努力将用户界面重绘与硬件刷新率同步。 这意味着它的目标是以每秒60帧的速度重新绘制 – 每帧只有16.67毫秒。 如果我们在16毫秒左右的主线程上工作,我们就会影响帧速率,从而导致口吃不畅,animation滚动,等等。

    理想情况下,我们当然不想放弃一个框架。 Jank,反应迟钝,尤其是ANR,提供了非常差的用户体验,这意味着糟糕的评论和不受欢迎的应用程序。 构buildAndroid应用程序时遵循的规则是:不要阻塞主线程!

    注意 :

    Android在每个设备上的“开发人员选项”中提供了有用的严格模式设置,当应用程序在主线程上执行长时间运行操作时,这些设置将在屏幕上闪烁。

    通过引入一个新的Exception类,NetworkOnMainThreadException,在系统检测到主线程上启动的networking活动时抛出的RuntimeException的子类,在Honeycomb(API级别11)中向平台添加了进一步的保护。

    资源 :

    asynchronousAndroid编程 – 第二版 – Helder Vasconcelos – 2016年7月