/**
* Handle system messages here.
*/
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
如果Message存在callback,会调用Message callback,我们下面看一下 Message callback是在哪里传进来的,我们看一下Handler post方法
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 callback赋值。
如果Message没有callback,会走到else,首先会判断Handler.Callback是否为空,不为空,且Handler.Callback handMessage方法返回值为true,则不会执行handler handMessage方法,若返回为false,会执行Handler handleMessage方法
handler = new Handler(Looper.getMainLooper(),callback){
@Override
public void handleMessage(@NonNull Message msg) {
Log.e("MainActivity", "Handler handleMessage");
super.handleMessage(msg);
}
};
Message msg = new Message();
msg.what=1;
handler.sendMessage(msg);
Handler.Callback callback = new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message msg) {
Log.e("MainActivity", "callback handleMessage");
return true;//返回为true,不会执行Handler handleMessage方法,返回为false会执行
}
};
网友评论