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
  • 主线程的基本信息

你可能感兴趣的:(android)