BlockCanary检测卡顿(待补充蓝师傅方案)
检测机制
#Looper.Java
monitor.println(">>>>>DiapatchingTo")
msg.target.dispatchMesssage(msg)
monitor.println(">>>>>DiapatchingTo")
通过dispatchMesssage的前后时间是否大于1s,如果大于判定为卡顿
Choreographer.getInstance().postFrameCallback(new Choreographer.FrameCallback() {
public void doFrame(long frameTimeNanos) {
}
})
每次垂直同步信号发生时会在这里产生回调,一般16ms一次,也可以判断是否卡顿
Thread.currentThread().getStackTrace()[3]获取堆栈调用,可以知道那个方法正在耗时,这个方法不能乱用,因为会阻塞调用的线程
通过延迟调用并在时间阈值内取消的形式来判断卡顿的发生,通过上面的方法获取卡顿的方法
但不准确,因为可能延迟的时候,导致卡顿的方法结束了
获取方法运行时间
第三方库Hogo:侵入性高,功能弱
TraceView:性能开销大
SystemTrace:Trace.beginSection() Trace.endSection()
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 炎武的学习笔记!