【Android】ANR学习

在按钮中添加一个20秒的sleep会造成anr,

在onTouchEvent方法里添加一个sleep也会造成anr,

在onDraw方法里进行sleep,也可以造成anr,

一般情况下,主线程里进行长时间的操作,会出现anr,我们new一个子线程,里面进行while循环,并不会出现anr,为什么呢,因为主线程的相关操作进行了监管,有计时,才有了超时的概念,比如说员工午休了2个小时,被发现超时了,但是老板午休了3个小时,却没有被发现超时,因为没有对其进行监管。也就是说anr发生的原因是执行的时间超过了允许的时间。前提是被监管了。这是最基本的一个概念,但往往我们的目的只是查找anr发生的原因,哪里超时了,就忽略了这一点。

【6-5】补充

系统并没有对绘图onDraw进行超时监测,在onDraw里添加sleep会导致anr是由于长时间阻塞了主线程,导致其他anr观测点如input超时,触发了ANR

某些绘图操作,可能就是使用的长时间sleep来进行处理的

【补充结束】

service和input的anr相关分析较多,但是UI anr如onDraw里sleep发生anr的埋雷处理还不是很清晰,这个需要再查看分析,进一步学习。

从https://blog.csdn.net/qq_34519487/article/details/113030181 摘录一段话,

        那么哪些场景会造成ANR呢?

Service Timeout:前台服务在20s内未执行完成;
BroadcastQueue Timeout:前台广播在10s内未执行完成
ContentProvider Timeout:内容提供者在publish过超时10s;
InputDispatching Timeout:输入事件分发超时5s,包括按键和触摸事件。
————————————————
版权声明:本文为CSDN博主「Fighting_初心」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_34519487/article/details/113030181

参考资料:

Android ANR详解_Fighting_初心的博客-CSDN博客_android anr

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值