卡顿介绍
我们前文已经在 Android UI卡顿检测(一)——基于Handler机制的实现方案(线上方案) 中做了介绍。
想要了解的,可以点击上面链接来回顾。
基于WatchDog原理的方案及代码实现
原理
我们想要监控的是UI线程的卡顿,如果卡顿超过了5s,系统就会ANR,那么我们可以设置一个阈值,比如4s,超过阈值的卡顿,我们把UI线程的运行堆栈上传到我们的分析后台。
那么,如何监控UI线程的长时间卡顿呢/p>
参考系统的WatchDog原理,我们启动一个卡顿检测线程,该线程定期的向UI线程发送一条延迟消息,执行一个标志位加1的操作,如果规定时间内,标志位没有变化,则表示产生了卡顿。如果发生了变化,则代表没有长时间卡顿,我们重新执行延迟消息即可。
代码实现
我们通过调用startWork方法即可开启卡顿监控,原理和实现步骤,注释已经非常详尽了,这里不做重复解析了。
总结
- 在Android 5.0及以上系统中,默认启动了SELinux机制,所以我们的App在线上场景中,不能获得ANR的系统日志。
- 我们启动一个卡顿检测线程,该线程定期的向UI线程发送一条延迟消息,执行一个标志位加1的操作,如果规定时间内,标志位没有变化,则表示产生了卡顿。如果发生了变化,则代表没有长时间卡顿,我们重新执行延迟消息即可。
- 该方案可以根据自己的需求设置时间间隔。
- 该方案并不能完全检测到所有的设定条件内的卡顿问题,但可以配合前文的方案来实现交叉覆盖,基本可以满足我们的需求。
PS:性能优化专栏:《Android性能》持续更新中……
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!