Android UI卡顿检测(二)——基于WatchDog原理的方案(线上方案)

卡顿介绍


我们前文已经在 Android UI卡顿检测(一)——基于Handler机制的实现方案(线上方案) 中做了介绍。

想要了解的,可以点击上面链接来回顾。

基于WatchDog原理的方案及代码实现


由于在Android 5.0及以上系统中,默认启动了SELinux机制,所以我们的App在线上场景中,不能获得ANR的系统日志。但是ANR又是我们App稳定性指标的一部分,所以有此方案,配合前文 Android UI卡顿检测(一)——基于Handler机制的实现方案(线上方案) 来保障App在线上运行中的体验。

原理

我们想要监控的是UI线程的卡顿,如果卡顿超过了5s,系统就会ANR,那么我们可以设置一个阈值,比如4s,超过阈值的卡顿,我们把UI线程的运行堆栈上传到我们的分析后台。

那么,如何监控UI线程的长时间卡顿呢/p>

参考系统的WatchDog原理,我们启动一个卡顿检测线程,该线程定期的向UI线程发送一条延迟消息,执行一个标志位加1的操作,如果规定时间内,标志位没有变化,则表示产生了卡顿。如果发生了变化,则代表没有长时间卡顿,我们重新执行延迟消息即可。

代码实现

我们通过调用startWork方法即可开启卡顿监控,原理和实现步骤,注释已经非常详尽了,这里不做重复解析了。

总结


  1. 在Android 5.0及以上系统中,默认启动了SELinux机制,所以我们的App在线上场景中,不能获得ANR的系统日志。
  2. 我们启动一个卡顿检测线程,该线程定期的向UI线程发送一条延迟消息,执行一个标志位加1的操作,如果规定时间内,标志位没有变化,则表示产生了卡顿。如果发生了变化,则代表没有长时间卡顿,我们重新执行延迟消息即可。
  3. 该方案可以根据自己的需求设置时间间隔。
  4. 该方案并不能完全检测到所有的设定条件内的卡顿问题,但可以配合前文的方案来实现交叉覆盖,基本可以满足我们的需求。

PS:性能优化专栏:《Android性能》持续更新中……

来源:卜大爷

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月25日
下一篇 2022年5月25日

相关推荐