BlockCanary UI卡顿优化框架源码解析

183 阅读1分钟

BlockCanary使用流程

  1. 导入库
  2. 自定义类继承自BlockCanaryContext类
    provideBlockThreshold()返回的是事件处理的超时阈值,单位ms。
  3. 启动

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);
        }
    }