【精】android anr专题

本文深入探讨Android应用程序无响应(ANR)问题,解释主线程为何不能执行耗时操作,分析ANR发生的原因,如主线程超时、BroadcastReceiver执行过长等。并提供了解决思路,包括检查日志、调试方法和避免主线程阻塞的策略,同时介绍了ANR的实现原理。
摘要由CSDN通过智能技术生成

背景:

只有主线程才可以更新ui,因为为了防止多线程访问变量导致错误的问题,所以更新ui全部是在主线程中。我们可以通过handler 或者view 的post 的方法进行更新,还有runinUiThread等。

 

github: https://github.com/kodulf/ANRDemo

 

发生原因:

主线程执行时间超过5秒钟,broadcast 的onReceiver 方法执行超过了10秒钟,service 执行时间超过了15秒

Activity----->5秒
Broadcast----->10秒
Service----->20秒
会报ANR,都是在主线程中运行的

可能是下载的操作是在主线程直接进行操作了,例如broadcast的onreceiver 里面执行的时间太长了,service

 

举个例子:

比方kfc, 前面点餐员,如果你还让点餐员去给你拿餐,人少的时候还可以,可以快速的响应你,如果人多的时候,那么,可能就会出现后台做不过来,需要点餐员在那边等着然后才能给你拿。

正确的做法应该是,点餐员就负责给你点餐,然后后面有专门的人负责给你去餐,点完餐在旁边等待就好了,不要打扰后面的人点餐。

 

解决思路:

1: 当前的怎么check log 

如果出现了anr,那么会有两个地方的log,

1.1 首先就是logcat 里面的log,我们可以定位到线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值