Matrix卡顿监控

Matrix 卡顿监控

应用启动流程

在这里插入图片描述

Activity启动流程

在这里插入图片描述

Handler

在这里插入图片描述

在这里插入图片描述

卡顿监控

主线程所有执行的任务都在 dispatchMessage 方法中派发执行完成,我们通过 setMessageLogging 的方式给主线程的 Looper 设置一个 Printer ,因为 dispatchMessage 执行前后都会打印对应信息,在执行前利用另外一条线程,通过 Thread#getStackTrace 接口,以轮询的方式获取主线程执行堆栈信息并记录起来,同时统计每次 dispatchMessage 方法执行耗时,当超出阈值时,将该次获取的堆栈进行分析上报,从而来捕捉卡顿信息,否则丢弃此次记录的堆栈信息。
在这里插入图片描述

定位卡顿问题

利用Handler完成监控,在抓取堆栈时候,落地存在偏差,对于稍微复杂一点的堆栈,很难找出可能耗时的函数,也就很难找到卡顿的原因。

在这里插入图片描述

字节码插桩

对于开发人员,了解字节码可以更准确、直观地理解Java语言中更深层次的东西,比如通过字节码, 可以很直观地看到synchronized、Volatile等关键字如何在字节码上生效,掌握原理。而字节码插桩就是在Class字节码中插入代码。
在这里插入图片描述

ASM框架

操作Java 字节码的框架,按照Class文件的格式,解析、修改、生成Class,可以动态生成类或者增强现有类的功能。

正如GSON操作json的框架。

在这里插入图片描述

ASM类

ClassReader类:字节码的读取与分析引擎。accpet方法接受一个ClassVisitor ClassVisitor抽象类:访问类解析,如注解解析、方法解析、成员变量解析等。ClassWriter类:实现ClassVisitor接口,可以获得解析结果,不进行任何修改。需要自定义ClassVisitor修改原Class。

MethodVisitor接口:访问方法解析,如方法上的注解、参数、代码等。

在这里插入图片描述

所有访问者以接口/抽象类的形式,与被访问对象/数据解耦

插桩实践

在这里插入图片描述

代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值