文章目录
- 卡顿
- 一、可重现的卡顿
- 二、不可重现的卡顿
- 第一种方案: 基于 Looper 的监控方法
- 第二种方案:基于 Choreographer 的监控方法
- 第三种方案:字节码插桩方式
- 第四种方案: 使用 JVMTI 监听函数进入与退出
- 总结
- 相关大厂的方案
- ArgusAPM
- BlockCanary
- QQ空间卡慢组件
- Matrix
- 微信广研
- 参考文档
卡顿
卡顿
意味着我们的App发生了掉帧
,被使用者所感知。
而导致App卡顿的原因很多:UI绘制慢、内存使用不当(内存抖动)
等等情况都会导致程序出现卡顿,而这些卡顿又分为:
可重现
不可重现
一、可重现的卡顿
有一部分的卡顿是可本地复现的,对于这种容易重现的场景,一般我们在开发及体验测试阶段容易注意得到,而定位卡顿的根源,我们常用的方法是通过 TraceView
、Systrace
工具来抓取卡顿过程中函数的执行情况(堆栈,耗时,调用次数等)。
通过 TraceView
的可视化界面,我们可以具体知道某个过程中的调用栈信息及各个函数的执行次数与耗时,能比较直观的找到严重耗时的函数,帮助我们快速解决卡顿问题。
目前Traceview 已弃用。如果使用 Android Studio 3.2 或更高版本,则应改为使用 CPU Profiler