ANR

ANR 是Android中一个独立的概念,全称是Application Not Responding(应用程序无法响应)。

ANR产生的原因

只有当应用程序的UI线程响应超时才会引起ANR,超时的原因一般有2种:

  • 当前的事件没有得到处理,例如UI 线程正在响应另一个事件,当前事件由于某种原因被阻塞了。
  • 当前事件正在处理,但由于耗时太长没能及时处理完成

典型的ANR问题场景

  • UI线程存在耗时操作,例如UI线程正在处理网络请求,数据库操作或文件读取等,导致UI线程无法及时处理用户输入。在Android4.0后,如果在进行网络请求会抛出异常
  • 应用程序等待子线程释放某个锁,从而无法处理用户输入
  • 耗时的动画要大量的计算工作,导致cpu负载过重

ANR的定位和分析

  • Logcat日志信息
    logcat信息主要包含如下内容:
    导致ARN的类名和包名
    发生ARN的进程pid
    ANR的原因
    系统活跃进程的cpu占有率

  • 手机内部存储的/data/anr/traces.txt

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

通过命令行拉到桌面,打开可以开到导致ANR的堆栈信息,主要包含内容如下:

  • 手机的cpu架构:arm
  • 堆内存信息:Heap
  • 主线程的基本信息
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值