AndroidPerformanceMonitor icon indicating copy to clipboard operation
AndroidPerformanceMonitor copied to clipboard

LooperMonitor中println方法处理是不是有问题?

Open chandarlee opened this issue 7 years ago • 3 comments

看Looper的代码,println在开始和结束都会触发。那这里println方法里面的逻辑是不是存在问题?个人感觉第一次调用println方法的时候应该忽略,不做处理;从第二次调用开始计时才是正确的。因为第一次调用是在某个消息处理结束之后触发的,第二次调用才是对应真正的后续消息开始处理的时间点。

chandarlee avatar Aug 25 '17 10:08 chandarlee

我也觉得这个地方有问题,setMessageLogging()这个方法应该是在msg.target.dispatchMessage(msg)里面执行的,所以第一次调用LooperMonitor. println()的地方应该是logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);而不是期望的logging.println(">>>>> Dispatching to " + msg.target + " " + msg.callback + ": " + msg.what);

luwies avatar Sep 06 '17 02:09 luwies

多虑了,在 loop() 方法中,调用 println() 的时候不是直接使用的成员变量

            final Printer logging = me.mLogging;
            if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
            }

..
           try {
                msg.target.dispatchMessage(msg);
//...
            if (logging != null) {
                logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
            }

dispatchMessage 里面是对成员变量赋值,这个问题其实打个断点就明白了

pdog18 avatar Dec 19 '19 06:12 pdog18

多虑了,在 loop() 方法中,调用 println() 的时候不是直接使用的成员变量

            final Printer logging = me.mLogging;
            if (logging != null) {
                logging.println(">>>>> Dispatching to " + msg.target + " " +
                        msg.callback + ": " + msg.what);
            }

..
           try {
                msg.target.dispatchMessage(msg);
//...
            if (logging != null) {
                logging.println("<<<<< Finished to " + msg.target + " " + msg.callback);
            }

dispatchMessage 里面是对成员变量赋值,这个问题其实打个断点就明白了

赋值后还是使用的logging,所以不会先打finish

lightHater avatar Apr 02 '22 03:04 lightHater