什么是ANR?如何避免?

ANR:Application Not Responding(应用程序无响应).当出现下列情况时,Android就会显示ANR对话框了:

对输入事件(如按键、触摸屏事件)的响应超过5秒 意向接受器(intentReceiver)超过10秒钟仍未执行完

毕Android应用程序完全运行在一个独立的线程中。这就意味着,任何在主线程中运行的,

需要消耗大量时间的操作都会引发ANR。那么如何避免呢?可以用两种方式:

1.

AsyncTask异步任务中,doInBackground()和onPostExecute(Result)两个方法非常重要

doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如移动

护理系统中的网络连接、解析XML等操作。该方法必须重载。onPostExecute(Result)

这个方法也运行于UI线程,在doInBackground(Params…)方法执行后调用,该方法用于

处理后台任务执行后返回的结果。

2.  Thread子线程 + handler

  1. Handler mHandler = new Handler(){
  2. @Override
  3. public void handleMessage(Message msg) {
  4. super.handleMessage(msg);
  5. switch (msg.what) {
  6. case 0:
  7. //do something,refresh UI;
  8. break;
  9. default:
  10. break;
  11. }
  12. }
  13. };

你可以创建一个message对象,他可以发送对象,参数,用handler对象发送消息,接收到上面,判断消息,进行ui操作。

时间: 2024-10-27 01:35:28

什么是ANR?如何避免?的相关文章

ANR 是什么?怎样避免和解决ANR

在Android 上,如果你的应用程序有一段时间响应不够灵敏,系统会向用户显示一个对话框,这个对话框称作应用程序无响应(ANR:Application Not Responding)对话框.用户可以选择让程序继续运行,但是,他们在使用你的应用程序时,并不希望每次都要处理这个对话框.因此,在程序里对响应性能的设计很重要,这样,系统不会显示ANR 给用户.Activity 5 秒broadcast10 秒耗时的操作worker thread 里面完成, handler message…AsynTas

Android两种常见错误(ANR和FC)解决办法

ANR(Activity Not Respone)(无响应) 先介绍下Main线程(也称为UI线程.主线程) 功能: 1.创建UI控件 2.更新UI控件状态 3.事件处理 限制:Main线程不建议有超过5秒的事件 出现条件: 当用户输入事件5s内没有得到响应,将弹出ANR对话框 广播接收者的onReceive()执行时间超过10s 解决方案(原则): 所有可能的耗时操作都要在子线程()中执行 常见耗时操作: I/O:网络操作 SDcard 数据运算 FC(Force close) 原因: 1.E

Android ANR分析(三)

http://www.jianshu.com/p/8964812972be http://stackoverflow.com/questions/704311/android-how-do-i-investigate-an-anr Keeping Your App Responsive PreviousNext In this document What Triggers ANR? How to Avoid ANRs Reinforcing Responsiveness You should a

ANR异常产生的原因及其解决办法

ANRs ("Application Not Responding"),意思是"应用没有响应". 在如下情况下,Android会报出ANR错误: – 主线程 ("事件处理线程" / "UI线程") 在5秒内没有响应输入事件 – BroadcastReceiver 没有在10秒内完成返回 通常情况下,下面这些做法会导致ANR 1.在主线程内进行网络操作 2.在主线程内进行一些缓慢的磁盘操作(例如执行没有优化过的SQL查询) 应用

Android Force Close和ANR等异常处理方法

对android应用而言最常出现的异常是Force close和ANR(Application is not response). 对于这两类错误而言,应用是可以进行相关处理的. 一 Forceclose这类问题主要通过Thread.UncaughtExceptionHandler这个类来捕获异常.通过实现类里面的方法uncaughtException来实现应用在捕获到异常后进行相关的处理.一般这里处理基本放在应用的Application类中.为了方便大家进行相关处理,我这里写了个类,大家直接在

Android ANR发生原因总结

ANR(Application Not Responding) Android系统中应用无响应 是Android系统中比较常见的问题,当出现ANR时一般情况会弹出一个带有以下文字的对话框提示: Activity XXX(in XXXXX) is not responding. 比如: 粗略的来分会有两种情况导致ANR: 第一类:dispatchTimeout 输入事件分发超时,一般是由于主线程在5秒之内没有响应输入事件. 第二类:BroadcastReceiver没有在系统设定的时间内完成并返回

Android ANR分析(1)

转自:http://blog.csdn.net/itachi85/article/details/6918761 一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1:KeyDispatchTimeout(5 seconds) --主要类型 按键或触摸事件在特定时间内无响应 2:BroadcastTimeout(10 seconds) BroadcastReceiver在特定时间内无法处理完成 3:Servic

Android ANR分析(2)

转自:http://blog.csdn.net/ruingman/article/details/53118202 定义 主线程在特定的时间内没有做完特定的事情 常见的场景 A.input事件超过5S没有处理完成 B.service executing 超时(bind,create,start,unbind等等),前台20s,后台200s C.广播处理超时,前台10S,后台60s D.ContentProvider执行超时,20s 常见的原因 A.耗时操作,如复杂的layout,庞大的for循环

Android ANR 详解

ANR简介 ANR,是“Application Not Responding”的缩写,即“应用程序无响应”.在Android中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会监测应用程序的响应时间,如果应用程序主线程(即UI线程)在超时时间内对输入事件没有处理完毕,或者对特定操作没有执行完毕,就会出现ANR.对于输入事件没有处理完毕产生的ANR,Android会显示一个对话框,提示用户当前应用程序没有响应,用户可以选择继续等待

【Android】[转] ANR的分析和问题处理

一:什么是ANR ANR:Application Not Responding,即应用无响应 二:ANR的类型 ANR一般有三种类型: 1. KeyDispatchTimeout(5 seconds) --主要类型按键或触摸事件在特定时间内无响应 2. BroadcastTimeout(10 seconds) --BroadcastReceiver在特定时间内无法处理完成 3. ServiceTimeout(20 seconds) --小概率类型 Service在特定的时间内无法处理完成 三:K