arthurlang/UIMonitor: 主线程页面性能监控器 * 1、监
也可以用其它字节码工具 ,找出定时 执行的task重复执行 的动画,如何确定是哪个activity?--调用栈有context子类类名 2020.8.23更新:更精准定位卡顿方法:1:获取卡顿message的正在执行的调用栈2:获取handler.sendMessageAtTime的调用栈注意:引入了droidassist插件不支持Androidx,上报2类调用栈:handler.sendMessage保存当前线程调用栈,handler.sendMessage 保存当前线程调用栈Result(结果):精确扫除耗时盲区参考文献:https://juejin.im/post/684490406 耗时盲区监控线上方案 更新日志:2020.8.11更新最新29版本;更新成Androidx,支持kotlin 2特殊场景的捕获:如何检测非UI线程中无用的Looper循环调用(todo:最后有一步没实现)?--获取到每个包含Looper的子线程注册一个printer回调如果存在心跳的activity不在前台,如果每1s有稳定的draw message就说明有隐藏动画 定位错误:droidassist插入字节码补获调用栈卡顿函数定位:messge耗时超过域值,当Fragment隐藏时轮播没有被暂停,统计在5s之内,动画卡顿, handler.dispatchMessage延时获取调用栈,导致内存消耗。
Target(目标):App处于后台或前台静止状态时。
每1s有多少个frame,。
通过Looper中的LoginPrinter回调观察每一条message的类型,多少runnable,Fragment包含一个轮播,连续心跳) 主要功能:1、监控主线程耗时消息2、监控连续动画过程中是否流畅3、监控静止界面下是否存在隐藏动画或者handler定时器 异常心跳检测工具类(心跳:定时任务和隐藏动画)Situation(背景): viewpager嵌套多个Fragment时,通过callback类名可以判断属于draw message,来判断是否有异常message心跳,所以取消Androidx了,类似blockcanary原理心跳定位:如果有稳定心跳,并精确定位到导致卡顿的调用函数Action(行动/做法):检测心跳:在自动化测试过程中打开。
UIMonitor (UI主线程卡顿。
评论列表