ANR分析和实例

本文详细探讨了Android应用无响应(ANR)现象,包括ANR的触发条件,如主线程5秒内未响应输入事件、BroadcastReceiver超时等。通过对log和trace的分析,揭示了ANR的常见原因,如长时间I/O操作、网络阻塞和BroadcastReceiver执行过慢。提出了避免ANR的建议,如使用工作线程、减少UI线程负载,并分析了keyDispatchingTimedOut的检测机制。实例分析中,展示了如何通过traces.txt定位问题并解决死锁导致的ANR。
摘要由CSDN通过智能技术生成

ANR (“Application Not Responding”)——“应用没有响应”。

当某个应用处于长期无响应状态,Android系统会弹出一个窗口上面写道,XXX is not responding给出两个按钮一个为Force close一个为Wait。

Anr.png


什么导致ANR发生

在Android中,应用程序是由Activity Manager和Window Manager系统服务监视的。当遇到下面任何一个情况中时,Android显示ANR:

  1. 主线程 (“事件处理线程” / “UI线程”) 在5秒内没有响应输入事件;
  2. BroadcastReceiver 没有在10秒内完成返回;
  3. Server没有在20秒内完成;

从代码分析ANR

ANR最终显示对话框和打印log信息方法: com.android.server.am.ActivityManagerService.appNotResponding

其调用图如下: CalledByGraph-ActivityManagerService-appNotResponding.png


分析log和trace

出现ANR后需要获取的信息

  1. trace信息(/data/anr/traces.txt)

分析方法

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值