性能优化-卡顿监控组件总结

169 阅读1分钟

背景

线下卡顿定位卡顿原因 为排查问题提供抓手。

监控主线程卡顿

近期在研究关于 Android 卡顿性能监控,分别验证了两种相对有效的监测方案:

Looper 字符串匹配方案

优势:
实现方案简单,原生API支持,兼容性好,部分机型可能更改这部分代码导致匹配不到,不过可以忽略不计。
在这里插入图片描述

Choreographer 帧率检测方案

在这里插入图片描述

优势:
能够计算帧率。
不足:
doFrame() 回调在主线程,主线程没消息 时也需要主动注册回调,对性能有一定损耗,同时会采集到一些无用堆栈,例如

 Message msg = queue.next(); 

代表主线程无消息,loop方法阻塞。

采集策略

事件开始 :
开始采集堆栈,并保存在内存中,采集频率为100ms, 阈值为160ms(大致10帧),平均采集到2个堆栈左右。之前定义的80ms(5帧),较为严格,支持可配置。
事件结束:结束时判断是否超过阈值,如果超过阈值则将内存中堆栈信息的落盘,按天存储。

上报处理

  1. 灰度开启
    考虑到量比较大,灰度开启,采用人海战术,服务端解析然后入库,平台展示。
    堆栈被混淆需要服务端支持,进行map文件反解析。
  2. 上报次数限制
    每日上报次数限制为10次。

验证效果

  1. 布局优化 onCreate
  2. 字符串拼接耗时函数等

参考

cloud.tencent.com/developer/a…
juejin.cn/post/684490…
testerhome.com/articles/17…