都知道避免ANR,但该如何分析,定位,解决?

一、什么是Anr:

application not responding 程序无响应。程序在规定的时间内没有响应。

超时时间的计数一般是从按键分发给app开始。超时的原因一般有两种:

1.当前的事件没有机会得到处理(即UI线程正在处理前一个事件,没有及时的完成或者looper被某种原因阻塞住了);

2.当前的事件正在处理,但没有及时完成。

二、Anr的主要原因

ANR一般有三种类型:

1:KeyDispatchTimeout(5 seconds) --主要类型

按键或触摸事件在特定时间内无法得到响应

2:BroadcastTimeout(10 seconds)

BroadcastReceiver在的onRecieve运行在主线程中,短时间内无法处理完成导致

3:ServiceTimeout(20 seconds) --小概率类型

Service的各个声明周期在特定时间内无法处理完成

Anr场景分析

1.使用命令导出anr日志

adb pull /data/anr/traces.txt  ~/Desktop/

2.分析关键信息

以每行的重点内容没准,每行自带时间戳


Process:anr发生的时间和进程,和生成traces文件的时间
CPUusage ... ago :cpu在anr发生前的使用情况
CPUusage ...later: cpu在anr后的使用情况
ABI:         手机的cpu架构
HEAP:     堆的内存信息
ANR in:包名,和类名
Reason:原因
TOTAL:总的CPU使用率
prio:线程的优先级
tid:线程锁id  主线程的id为1  主要看这个线程的
Sleeping:线程的状态
sCount:线程被挂起的次数
dsCount:线程是否被调试

 

04-01 13:12:11.572** I/InputDispatcher( 220): Application is not responding**:Window{2b263310com.[Android](http://lib.csdn.net/base/android).email/com.android.email.activity.SplitScreenActivitypaused=false}.  5009.8ms since event, 5009.5ms since waitstarted
04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.a
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值