Android Error -—— ANR摘要

1、ANR是什么?
ANR全称Application Not Responding即应用程序无响应。在Android中如果应用程序有一段时间无法响应用户操作,系统会弹出弹窗,让用户选择是继续等待还是强制关闭程序。一款良好应用APP是不应该出现这个弹窗的。

2 、ANR的产生原因
ANR产生原因和类型有以下几种:
1、Activity在5秒钟之内无法响应屏幕触摸事件挥着键盘输入事件就会产生ANR。
KeyDispatchTimeout
Reason:Input event dispatching timed out
2、BroadcastReceiver在10秒钟之内还未执行完成就会产生ANR。
BroadcastTimeout
Reason:Timeout of broadcast BroadcastRecord
3、Service各个生命周期在20秒钟之内没有执行完成就会产生ANR。
ServiceTimeout
Reason:Timeout executing service
4、ContentProvider在10秒钟之内没有执行完成就会产生ANR。
ContentProviderTimeout
Reason:timeout publishing content providers
在以上这几种原因中出现最多的一般是第一种,而且往往都是因为在写代码时不注意,在主线程做了耗时的操作。

光在主线程做耗时操作不会产生ANR,超时响应用户操作才会产生ANR。
ANR的定位方法主要是根据Logcat中日志和ANR过程中生成的堆栈信息文件traces.txt。
解决问题不如预防问题,写代码的时候要注意预防产生ANR。
预防ANR的产生不光是在Activity中注意要把耗时操作放到子线程中去,还要注意在使用其他三个组件时,在其生命周期中同样不能做太耗时的操作。另外在使用多线程时候要注意同步和死锁的情况,一旦产生死锁主线程同样会引发ANR。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值