Message处理流程
- Loop#loop开启无限循环
不断的从消息队列里面取出消息
...
for (;;) {
Message msg = queue.next(); // might block
if (msg == null) {
// No message indicates that the message queue is quitting.
return;
}
}
...
然后调用msg.target的方法,也就是handlder处理消息。
msg.target.dispatchMessage(msg);
- Handler的dispatchMessage()方法
/**
* Handle system messages here.
*/
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
处理流程,先判断当前message有没有设置过callback,然后在判断当前mCallback对象是不是null,这个对象是什么时候赋值的呢?
我们经常会这样使用Handler,mCallback就是这样被赋值的。
val handler = Handler(object :Handler.Callback{
override fun handleMessage(msg: Message): Boolean {
TODO("Not yet implemented")
}
})
- 问题 如果设置了mCallback,并且重写了handleMessage()方法,由源码可知,如果Callback,你返回了true,那么重写的handleMessage方法将不再执行。
val handler = object : Handler(Callback { TODO("Not yet implemented") }) {
override fun handleMessage(msg: Message) {
super.handleMessage(msg)
}
}