归档: 2018/10

共 47 篇文章

ANR分析记录(一)ANR初识

Application Not Responding(简称:ANR)指应用中一些特定的事件(如用户触摸事件、广播等)在应用的主线程没有在规定的时间内处理完,系统自动做出终止应用运行的响应。问题出现的原因主要是两个方面:

  1. 应用进程自身引起的,例如:主线程阻塞、挂起、死循环
  2. 应用进程的其他线程的CPU占用率高,使得主线程无法抢占到CPU时间片

常见的三种ANR类型:

  1. KeyDispatchTimeout(谷歌默认5s,MTK平台上是8s): 主要类型按键或触摸事件在特定时间内无响应
  2. BroadcastTimeout(10s): 主要是BroadcastRecevier在规定时间无法处理完成。前台广播超时时间是10s,后台广播超时是60s,这类超时没有提示框弹出。代码见AMS的BROADCAST_FG_TIMEOUTBROADCAST_BG_TIMEOUT
  3. ServiceTimeout(20s): Service在规定时间内无法处理完成操作,即会报出服务超时,这类ANR同样没有提示框出现。超时时间,前台Service是20s,后台Service是200s。代码见ActivityServices的SERVICE_TIMEOUTSERVICE_BACKGROUND_TIMEOUT

Read More