[ANR监控] ANR捕获,这些要点你必须知道

计算机软件开发 2024-9-7 03:43:24 87 0 来自 中国
大家都知道,当发生ANR后,App会弹窗提示”应用失去相应,是否重启“,然后体系会dump一份trace文件,存在data/anr目次下。
平常应用怎样监控ANR的发生呢?
这个时间,体系肯定是知道ANR发生了,以是像Console和Firebase这些工具都能很好的拿到ANR发生的时间和trace文件的内容。
但是,作为面向平常应用的监控sdk,许多体系应用有的权限都没有,我们怎么才气判断ANR的发生呢?别的高版本的Android体系,限定了平常应用读取trace文件的权限,我们又怎样拿到ANR发生时dump出来的trace文件呢?
ANR捕获的根本原理
发生ANR的时间,体系的system_server历程会发送SIGQUIT信号给一些历程,包罗发生ANR的历程、占用体系资源较多的历程,让这些历程举行dump利用。
我们可以通过在应用内拦截这个信号,来判断当进步程是否须要dump。但是收到信号并不体现当进步程肯定发生了ANR,也大概是其他历程发生了ANR,刚好我们的历程运行在配景,且资源斲丧比较多,system_server也发送信号让我们历程去做dump。以是光凭这个逻辑,无法判断是否是当进步程发生的ANR,还须要加一些其他的判断条件。接下来就让我们从Matrix的源码角度,看看业界通用的比较成熟的通用方案吧。
监听SIGQUIT信号


  • 起首Matrix在AnrDumper方法里,将sigquit设置成SIG_UNBLOCK。
由于Android默认把SIGQUIT信号设置成BLOCKED,以是只会相应sigwait,而不会进入我们设置的handler中。以是须要通过pthread_sigmask将SIGQUIT信号设置成UNBLOCK,才气进入我们的handler方法。
您需要登录后才可以回帖 登录 | 立即注册

Powered by CangBaoKu v1.0 小黑屋藏宝库It社区( 冀ICP备14008649号 )

GMT+8, 2024-12-4 16:52, Processed in 0.119832 second(s), 32 queries.© 2003-2025 cbk Team.

快速回复 返回顶部 返回列表