开始了,这里随便制造一个ANR。
findViewById(R.id.tv_click).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
Thread.sleep(6000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
1.发生ANR
![](https://img.haomeiwen.com/i8669504/c1f92f2f57932321.png)
2. adb命令查看 data/anr目录下的ANR文件
adb shell ls /data/anr/
![](https://img.haomeiwen.com/i8669504/e9cbf1ea717a7cc4.png)
3. 导出bug文件
使用用于生成 bug 文件的命令
adb bugreport /Users/Libo/Desktop/bugReport
此时需要耐心等待导出进度条
![](https://img.haomeiwen.com/i8669504/a64d301bb16fd7b8.png)
![](https://img.haomeiwen.com/i8669504/3fe5d87c14b342b1.png)
4.打开文件查看ANR文件内容
![](https://img.haomeiwen.com/i8669504/b89a9b223216a228.png)
打开其中的一个anr日志如下:
----- pid 23004 at 2023-11-04 23:32:04.239566780+0800 -----
Cmd line: com.example.onlyfortest
Build fingerprint: 'Xiaomi/star/star:13/TKQ1.220829.002/V14.0.9.0.TKACNXM:user/release-keys'
ABI: 'arm64'
Build type: optimized
Zygote loaded classes=20900 post zygote classes=1320
Dumping registered class loaders
[/data/app/~~NcJvErjtctDrtRo6jyhFMg==/com.example.onlyfortest-XO4snvMjZmyObpZv2EYzGQ==/base.apk!classes3.dex:/data/app/~~NcJvErjtctDrtRo6jyhFMg==/com.example.onlyfortest-XO4snvMjZmyObpZv2EYzGQ==/base.apk!classes2.dex:/data/app/~~NcJvErjtctDrtRo6jyhFMg==/com.example.onlyfortest-XO4snvMjZmyObpZv2EYzGQ==/base.apk], parent #1
Done dumping class loaders
...
"main" prio=5 tid=1 Sleeping
| group="main" sCount=1 ucsCount=0 flags=1 obj=0x718c2eb8 self=0xb400007c14642c00
| sysTid=23004 nice=-10 cgrp=top-app sched=0/0 handle=0x7cbce424f8
| state=S schedstat=( 1869109042 3774518520 32803 ) utm=36 stm=150 core=5 HZ=100
| stack=0x7ffc03b000-0x7ffc03d000 stackSize=8188KB
| held mutexes=
at java.lang.Thread.sleep(Native method)
- sleeping on <0x0fb52838> (a java.lang.Object)
at java.lang.Thread.sleep(Thread.java:450)
- locked <0x0fb52838> (a java.lang.Object)
at java.lang.Thread.sleep(Thread.java:355)
at com.example.onlyfortest.MainActivity$1.onClick(MainActivity.java:18)
at android.view.View.performClick(View.java:7548)
at android.view.View.performClickInternal(View.java:7525)
at android.view.View.-$$Nest$mperformClickInternal(unavailable:0)
at android.view.View$PerformClick.run(View.java:29562)
at android.os.Handler.handleCallback(Handler.java:942)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loopOnce(Looper.java:210)
at android.os.Looper.loop(Looper.java:299)
at android.app.ActivityThread.main(ActivityThread.java:8261)
at java.lang.reflect.Method.invoke(Native method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:559)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:954)
Traces.txt文件内容:
![](https://img.haomeiwen.com/i8669504/9c11c236f99a5e25.png)
![](https://img.haomeiwen.com/i8669504/b6f0bd719ec4642b.png)
![](https://img.haomeiwen.com/i8669504/615638c1bc77629d.png)
![](https://img.haomeiwen.com/i8669504/16bbc39a67fea610.png)
在文件中搜索"main",获取主线程报错的位置,这里找到了耗时ANR的原因,MainAcyivity里面的onClick方法使用了Thread.sleep导致的耗时。
![](https://img.haomeiwen.com/i8669504/eee18d910279f6fa.png)
网友评论