示例成品 · 平台演示,按左边这组点选真跑出来的
示例:本周 ANR 归因表(示意数据)
统计周期:2024-06-03 至 2024-06-09;平台:Android 原生;启动次数:1,200,000;ANR 总次数:240;ANR 率:0.020%
签名ID | 主线程卡点 | 平均阻塞时长(ms) | 疑似原因 | 出现次数 | 占比
S-001 | SQLiteDatabase.query 锁等待 | 5,200 | 主线程直接查库,未走异步 | 96 | 40.0%
S-002 | Binder.transact 超时 | 5,800 | 跨进程调用同步等待 | 60 | 25.0%
S-003 | SharedPreferences.commit 写文件 | 4,900 | 主线程同步提交 | 48 | 20.0%
S-004 | ViewRootImpl.performTraversals 绘制 | 5,100 | 复杂布局嵌套过深 | 24 | 10.0%
S-005 | BroadcastReceiver.onReceive 耗时 | 5,300 | 广播内做网络请求 | 12 | 5.0%
结论与建议:
1. S-001 占比最高,建议将查库移出主线程并加缓存。
2. S-002 检查跨进程调用是否可改为异步回调。
3. S-003 建议改用 apply() 或子线程写入。
4. S-004 用布局分析工具排查层级。
5. S-005 广播内禁止网络请求,改由 WorkManager 执行。
注:以上为示意数据,实际结果由程序按上传 traces 计算。
点左边「开工 · 直接出成品」,出一份你自己的版本(文字免费)