理解
一个Thread只有一个 Looper, 每个Looper都有它对应的MessageQueue。
多个Handler可以向MessageQueue发送Message或Runnable。Looper依次处理MessageQueue中的Message(或Runnable),将Message发送给相应的Handler处理。
Looper
https://developer.android.com/reference/android/os/Looper.html
理解用的关系图
该教程 中的
http://www.runoob.com/wp-content/uploads/2015/07/25345060.jpg
新建的Thread中 , Handler的基本用法
class LooperThread extends Thread {
public Handler mHandler;
public void run() {
Looper.prepare();
mHandler = new Handler() {
public void handleMessage(Message msg) {
// process incoming messages here
}
};
Looper.loop();
}
}
一个Activity中的多个Handler是如何正确分配Message的
http://blog.csdn.net/u010680097/article/details/52142396
继续看当handler调用sendMessage的时候,会层层往下调用函数直到enqueueMessage这个函数
private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) {
msg.target = this;
if (mAsynchronous) {
msg.setAsynchronous(true);
}
return queue.enqueueMessage(msg, uptimeMillis);
}
通过设置msg的target为handler对象自己, 来标记这个Message
然后看Looper里的loop函数, 我们看到 msg.target.dispatchMessage(msg);
这一句是,直接将这个消息交给了发送这个消息的handler处理。
继续看handler中的dispatchMessage源码:
public void dispatchMessage(Message msg) {
if (msg.callback != null) {
handleCallback(msg);
} else {
if (mCallback != null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
handler最终拿到消息调用handleMessage(msg)