关于这个handler.post(Runnable r)这个方法,用过很多次,
看下源码,它到底是怎样处理的。
public final boolean post(Runnable r)
{
return sendMessageDelayed(getPostMessage(r), 0);
}
看下getPostMessage(r)这个方法的源码,
private static Message getPostMessage(Runnable r) {
Message m = Message.obtain();
m.callback = r;
return m;
}
给message设置了回调,
然后,looper进行消息循环,进行消息的分发,
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
如果回调不为空, handleCallback(msg) 找个方法就会执行,
private static void handleCallback(Message message) {
message.callback.run();
}<span style="font-family: Arial, Helvetica, sans-serif;">调用了run方法。</span>