从品牌网站建设到网络营销策划,从策略到执行的一站式服务
如何进行ANR简述,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
站在用户的角度思考问题,与客户深入沟通,找到盘州网站设计与盘州网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站制作、成都外贸网站建设、企业官网、英文网站、手机端网站、网站推广、域名申请、网页空间、企业邮箱。业务覆盖盘州地区。
什么是ANR?ANR即为Application Not Responding,也就是应用程序无响应。
Android系统中,ActivityManagerService(简称AMS)和WindowManagerService(简称WMS)会检测App的响应时间,如果App在特定时间无法相应屏幕触摸或键盘输入时间,或者特定事件没有处理完毕,就会出现ANR。
产生ANR的原因一般有以下三种:
1.点击、触摸、键盘输入事件在5s内没有及时响应(inputdispatch timeout)
2.广播超时没有响应,前台广播10s未响应,后台广播60s未响应 (Broadcast timeout)
3.service 20s 没有响应 (service timeout)
现在我们通过一个分析实例来进行阐述,如何分析anr 的问题
1.首先我们要先分析一个anr的systemlog
通过搜索关键字“anr ”可以定位到在log中anr 发生的地方,如下图
从systemlog中这段log,我们可以知道几个关键的点
1.anr发生的进程名、进程号(PID: 1531)
2.anr发生的原因(如上点击事件超时未响应)
3.anr发生的时候,当时的进程cpu占用情况,同时具体进程占用的上层和kernel层资源情况。
2.通过上一步的大致描述,找到anr发生的时间点
上面可以看到anr是因为点击事件超时没有响应,导致的anr,那么我们可以在这个时间点的前5s(个别定制化平台可能时间不为5s),查看具体发生anr的进程(Pid 1531)在做什么。
在systemlog中查看到具体anr发生的时间点,以便我们了解该时间点的时候,系统进程在进行什么操作,同时,可以简单看下我们的具体进程在进行什么操作
3.查找trcace文件,查看进程的堆栈(最重要的一步)
从这个截图来看,我们首先找到pid 为1531的进程main进程,查看当时main进程卡死在什么地方。
从状态native来看,是进程卡在了native层没有及时返回,从堆栈来看进程是在操作imagePlayerManager.init
的时候,进行进程间通信,在native层卡主没有及时返回。
所以此时要找到对应堆栈在代码中的位置,查看具体耗时操作。查看卡主未返回的具体原因。
在耗时操作位置做规避来防止anr的发生。
导致ANR的情况还有很多,进程死循环、死锁、耗时操作(网络请求,图片处理,数据库处理等)卡死主线程。
后续找到经典案例继续补充。
分析ANR需要trace文件这个是非常重要的一点。
关于如何进行ANR简述问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注创新互联行业资讯频道了解更多相关知识。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图