sendMessage和post基本一样,区别在于post的Runnable会被赋值给Message的callback,在最后调用dispatchMessage的时候,callback会被触发执行。
1.sendMessage
- 调用sendMessageDelayed发送消息
public class Handler {
public final boolean sendMessage(Message msg){
return sendMessageDelayed(msg, 0);
}
}
2.post
- 通过Message的obtain创建Message
- 将Runnable赋值给Message的callback
- 调用sendMessageDelayed发送消息
public class Handler {
public final boolean post(Runnable r){
return sendMessageDelayed(getPostMessage(r), 0);
}
}
public class Handler {
private static Message getPostMessage(Runnable r) {
Message m = Message.obtain(); //从缓存获取Message
m.callback = r; //Runnable 赋值给Message的callback
return m;
}
}
3.消息执行
public class Handler {
public void dispatchMessage(Message msg) {
if (msg.callback != null) {//post会走这里,因为它callback不为null
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);//sendMessage会走这里,调用Handler的handleMessage
}
}
private static void handleCallback(Message message) {
message.callback.run();//post的Runnable执行
}
}