美文网首页
BlockCanary原理

BlockCanary原理

作者: 杨华_6f65 | 来源:发表于2019-04-28 16:04 被阅读0次

    我们都知道Android应用程序只有一个主线程ActivityThread,这个主线程会创建一个Looper(Looper.prepare),而Looper又会关联一个MessageQueue,主线程Looper会在应用的生命周期内不断轮询(Looper.loop),从MessageQueue取出Message 更新UI。

    public static void loop() {
        ...
        for (;;) {
            ...
            // This must be in a local variable, in case a UI event sets the logger
            Printer logging = me.mLogging;
            if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
            }
            msg.target.dispatchMessage(msg);
            if (logging != null) {
                logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
            }
            ...
        }
    }
    

    dispatchMessage的前后加log,然后比较这两个log的时间差,就是执行这个message的时间,如果大于16ms一般就会丢帧,你可以设置自己的一个阈值,如果超过这个阈值,就把方法栈给打印出来或显示出来。

    相关文章

      网友评论

          本文标题:BlockCanary原理

          本文链接:https://www.haomeiwen.com/subject/sjfjnqtx.html