AndroidPerformanceMonitor
AndroidPerformanceMonitor copied to clipboard
LooperMonitor中println方法处理是不是有问题?
看Looper的代码,println在开始和结束都会触发。那这里println方法里面的逻辑是不是存在问题?个人感觉第一次调用println方法的时候应该忽略,不做处理;从第二次调用开始计时才是正确的。因为第一次调用是在某个消息处理结束之后触发的,第二次调用才是对应真正的后续消息开始处理的时间点。
我也觉得这个地方有问题,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);
多虑了,在 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
里面是对成员变量赋值,这个问题其实打个断点就明白了
多虑了,在
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