码迷,mamicode.com
首页 > 其他好文 > 详细

什么是ANR?如何避免?

时间:2016-08-08 20:59:34      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

ANRApplication 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.   
  3.     @Override  
  4.     public void handleMessage(Message msg) {  
  5.         super.handleMessage(msg);  
  6.         switch (msg.what) {  
  7.         case 0:  
  8.             //do something,refresh UI;  
  9.             break;  
  10.         default:  
  11.             break;  
  12.         }  
  13.     }  
  14.       
  15. };  

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

 

什么是ANR?如何避免?

标签:

原文地址:http://www.cnblogs.com/yanghongliang/p/5750802.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!