android anr 产生的条件

android anr 感知

一般地,ANR的产生需要同时满足三个条件: 

1、主线程方面:

只有应用程序进程的主线程(即:UI线程)响应超时才会产生ANR;UI线程时与用户进行交互的线程,如果它在阻塞或者长时间在处理某个人物无法让用户进行下一步交互操作,感知上就是这程序怎么卡死了,体验很差,故而其需要一定的超时提醒,也就是ANR的提醒;而子线程的阻塞或者缓慢只要不影响主线程的人机交互就没必要有相应的提醒,另程序无可避免也会有一些耗时及阻塞等待等任务需要处理,又不能再UI线程进行,那只能在子线程处理了。

2、超时时间方面:

不同程序场景类型ANR的超时时间不同,这超时时间是由场景需求及容忍度来决定的。只要在这个时间上限内没有响应就会产生ANR。

3、相应事件或操作:

这里是输入事件(人机交互(按键、触屏等设备输入的事件)),BroadcastReceiver和Service的生命周期中的相关场景类型不同,因此其产生报出的ANR的原因也不同。那么场景都有些啥呢?如下:

  • InputDispatching Timeout:在应用程序UI线程被阻塞的情况下,用户点击了屏幕或按了需要UI处理的按键,在超时后会报出ANR;
  • BroadcastQueue Timeout:接收到需要处理的广播,在广播处理是未在超时时间前处理完成,会报出ANR;
  • 在用户切换窗口是,由于各种原因导致焦点未在超时前定位自己的位置而报出ANR;
  • Service Timeout:启动service,service在20s内无法处理完成操作,即会报出服务超时报出ANR;
  • ContentProvider Timeout:ContentProvider的publish在超时前没进行完报出ANR。

整体上来说ANR就是在这些情况下产生的,那么ANR这个东东都是以哪些妆容来向世界展示自己的呢,随后分解。

android anr 产生的原因及类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值