Handler的中 Message 处理流程源码
<pre>
public void dispatchMessage(Message msg) {
if (msg.callback !=null) {
handleCallback(msg);
}else {
if (mCallback !=null) {
if (mCallback.handleMessage(msg)) {
return;
}
}
handleMessage(msg);
}
}
</pre>
处理流程分为了三步:
1.msg.callback是Hanlder中的 Runnable 接口,handleCallback(msg)调用了 Runnable 的 run()方法
2.mCallback是Handler中的的接口,mCallback.handleMessage(msg)调用了接口方法
3.调用Handler自身的handleMessage(msg)方法
Handler的使用
针对Handler的处理流程,Handler封装了几种方法,方便使用Handler
1.Handler mHandler = new Handler()
mHandler .post(runnable)
2.不需要继承Handler类,初始化时传入一个CallBack对象
Handler mHandler = new Handler(callback)
3.继承Handler类,重写 handleMessage(msg)方法;实例化这个自定义类,和一个Message,
mHandler.sendMessage(msg)
这三种Hanlder的使用方法分别对应了Handler对Message处理流程的三个步骤
Hanlder类结构
图中可以看到Handler类的成员变量:mCallback,mLooper,mQueue,以及封装进来的方法,发送方法包括:以send开头,post开头的一系列方法,处理方法包括:handleMessage(),dispatchMessage()