概述
作为一个开发人员,即使你不知道ANR异常,你肯定也遇到过程序无响应,其实ANR就是程序无响应(Application Not Responding)。那么什么是ANR呢?
一、什么是ANR?
ANR就是Application Not Responding,是安卓中弹出的一个对话框,让用户来选择等待或者直接关闭程序。activity响应超过5秒,service响应超过10秒,都会出现ANR。
二、ANR产生的原因
刚才也说了,activity响应超过5秒,service响应超过10秒,都会出现ANR。那么为什么activity或者service会用这么长时间来响应呢?最大的原因可能就是主线程被阻塞了。所以产生ANR的原因有以下两个:
- 主线程中存在耗时的计算
- 主线程被IO操作阻塞(安卓4.0以后,网络IO禁止在主线程执行)
那么安卓中有哪些是在主线程中执行的呢?
- activity的所有生命周期方法;
- service默认是在主线程的;、
- broadcast中的onReceive()回调方法;
- AsyncTask中除了doInBackgroud方法,其他的四个方法都是在主线程中的;
- Handler的handleMessage()和post(Runnable)方法,前提是这个Handler没有使用子线程的looper。
基本上就是这么多,所以在上述这些方法中是绝对不能做耗时操作的,否则就会出现ANR异常。
三、怎么避免ANR?
避免ANR的总方针就是不要阻塞主线程,具体的方法有以下这些:
- 使用AsyncTask来进行耗时操作;
- 使用Thread或者HandlerThread来提高线程优先级;
- 使用Handler来处理工作线程;
- 不要在Activity中执行耗时的计算。
一般做到以上几步就可以避免ANR了。
最后
以上就是隐形翅膀为你收集整理的ANR异常的全部内容,希望文章能够帮你解决ANR异常所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复