BlockCanary使用流程
- 导入库

- 自定义类继承自BlockCanaryContext类
provideBlockThreshold()返回的是事件处理的超时阈值,单位ms。

- 启动

BlockCanary核心原理
- Android看源码网站: androidxref.com/
- BlockCanary在
dispatchMessage(msg)方法(在主线程中运行)前后打印log信息,根据上下两个log的时间差来判定dispatchMessage是否产生了耗时操作(UI卡顿)。若产生UI卡顿,该时间差就可以写作为provideBlockThreshold()的返回值(超时阈值)。
- 具体使用情况中该时间差超过阈值,则会dump出信息,定位UI卡顿,
isBlock返回True,进而回调监听事件onBlockEvent。
dispatchMessage(msg)方法中会回调handleMessage(msg)(在主线程中运行):
/**
* Handle system messages here.
*/
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}