卡顿监控方法

android业界各家卡顿检测工具不同,主要分几类:

  • 注册printer callback

  • 注册Choreographer callback

  • MessageQueue插入空Message

  • 字节码插桩

产品原理
注册printer callback

BlockCanary、BlockCanaryEx、ArgusAPM(360)

监听每一条消息的耗时,Android System提供了一个Printer接口,通过Looper.getMainLooper().setMessageLogging 注册,主线程执行Message前后都进行一次回调Printer接口
注册Choreographer callback

Tinydancer,微信广研

Choreographer在收到Vsync信号时会执行frameCallback,所以调用mChoreographer.postCallback(Choreographer.CALLBACK_ANIMATION注册frameCallbck来监听相邻2帧执行的耗时
MessageQueue插入空Message华为荣耀、QQ空间卡慢组件启动子线程,在子线程中以固定频率(如1s)轮询,轮询时向主线程抛入1条空消息。轮询定时器触发时,若MessageQueue中空消息没执行,就报1 s卡顿抓栈。如果已执行完,就再抛出空消息。可以抛出多种时长的定时器一起轮询,就能检测到各种卡顿时长
字节码插桩

Matrix  TraceCanary(微信)

在Gradle编译字节码时会利用ASM插入埋点,新编写一个Gradle plugin,在app执行 transformClassesWithDexTask时会调用plugin,将全局 class 文件作为输入,扫描所有 class 文件中的方法并进行插桩

但是车机上和手机上需求不同:

  • 车机屏幕大,用户使用频率不高,因此流畅度容忍度高于手机
  • 车机厂商要开发的app很多,因此如果各个app都有卡顿检测工具,性能差

基于以上需求,我们自研了主线程绘制UI卡顿检测工具,因为系统在手,就把卡顿检测统一放在Framework实现,app再也不用担心卡顿了,一劳永逸

原理也是基于MessageQueue插入空Message,但性能好与华为的BlockDetector和BlockCanary,具体检测原理有辛苦可以评论或私信我

各家优缺点:

产品原理定位卡顿调用栈精度性能消耗集成方式有没有deamon线程
BlockCanaryExprinter+javaAsssit插桩App
TinydancerChoreographerApp
TraceCanary(matrix)asm插桩+高效采集耗时函数算法App
华为、QQ空间卡慢组件

抛入空Message

App
UIBlockMonitor抛入空Message超级低framework
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值