美文网首页
记录一个Android ANR 异常排查

记录一个Android ANR 异常排查

作者: 我在这里_3906 | 来源:发表于2020-10-15 15:40 被阅读0次

刚接手一个项目的维护,跑着跑着就会出现ANR的情况。当ANR出现的时候,在手机存储中会生成一个文件,记录最后一次出现ANR的信息。

我的是连接真机,在AndroidStudio右下角有一个Device File Explorer 点击可以查看手机文件 ,然后data/anr 找到traces.txt文件


anr文件路径.png

我们把这个文件导出到本地,再打开日志
----- pid 1251 at 2020-10-15 13:24:01 -----
Cmd line: com.lenz.alcohol
这是说明 anr发生的所在进程pid 和时间 还有包名,还有设备的一些信息,有兴趣的可以仔细研究一下。

然后继续查看重要信息
"main" prio=5 tid=1 Waiting
| group="main" sCount=1 dsCount=0 obj=0x71b35bb8 self=0xae605400
| sysTid=1251 nice=-10 cgrp=default sched=0/0 handle=0xb13ff534
| state=S schedstat=( 1245384853 260920345 1095 ) utm=112 stm=11 core=2 HZ=100
| stack=0xbe7de000-0xbe7e0000 stackSize=8MB
| held mutexes=
at java.lang.Object.wait!(Native method)
waiting on <0x063a4313> (a java.lang.Object)
at java.lang.Object.wait(Object.java:407)
at java.lang.Thread.join(Thread.java:1290)
locked <0x063a4313> (a java.lang.Object)
at java.lang.Thread.join(Thread.java:1366)
at com.lenz.alcohol.ThreadService.onDestroy(ThreadService.java:149)
at android.app.ActivityThread.handleStopService(ActivityThread.java:3362)
at android.app.ActivityThread.-wrap27(ActivityThread.java:-1)
可以看出问题出现在我这个Service中的一行代码

问题代码定位
这里主要是当界面销毁时,把这个线程结束,置null。
至于thread.join()这行代码的意义,由于对多线程接触不是很多,特地去网上查了一下,是等待这个线程执行完毕才继续往下执行把线程置null。然后这个子线程是用来轮询接口数据的,并且是用同步请求访问数据,所以在若网的情况下数据迟迟不返回占用了主线程,导致系统报了ANR异常。

而的那个子线程中,是轮询访问网页的,所以设置一下超时时间,控制到20秒以内就好了。

相关文章

网友评论

      本文标题:记录一个Android ANR 异常排查

      本文链接:https://www.haomeiwen.com/subject/qdanpktx.html