深入了解ANR

一、ANR介绍

ANR ,是Application not responding,就是应用无响应的意思。这也是Android应用崩溃的三大崩溃之一。另外2个是RuntimeException和native信号异常。今天我们主要是分析ANR。

一般来说,出现ANR的场景有以下几种:

1)KeyDispatchTimeout:按键或者触摸事件在5秒内没有处理完成;

2)ServiceTimeout:service执行超时,前台10s,后台20s;

3)BroadcastTimeout:广播处理超时,前台10s,后台60s;

4)ContentProvider在20s内没有执行完成。

造成ANR的原因常见的有:

1、在主线程进行耗时操作如IO操作、数据库操作、连接网络等;

2、被子线程同步锁;

3、Binder被占满导致主线程不能和SystemServer通信;

4、得不到系统资源等。

二、分析ANR

一般出现ANR,我们在Logcat是看不到异常信息的。那我们要如何查看呢?我们在logcat中总会看到这样的日志:

I/art: Thread[2,tid=25238,WaitingInMainSignalCatcherLoop,Thread*=0xafa0e400,peer=0x12c2a080,"Signal Catcher"]: reacting to signal 3  
I/art: Wrote stack traces to '/data/anr/traces.txt'  

traces文件会记录异常位置、CPU和内存在当时的使用情况,我们可以通过命令打开该文件。

1、adb shell
2、cat /data/anr/traces.txt

 

三、避免ANR

1)在主线程中避免耗时操作,如复杂的Layout,io操作,数据库操作,网络连接等;

2)子线程中不要做跟UI相关的操作;

3)尽量使用Hanlder来处理Thread和UI之间的联系等。

 

参考链接:

ANR介绍 ANR分析ANR案例分析 ANR捕捉

转载于:https://www.cnblogs.com/hacjy/p/6904153.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值