Android Hander post与sendMessage的区别
post
1. post方法其实与sendMassage方法一样,都会调用
sendMessageDelayed(msg, 0);
2. post则是通过 getPostMessage(Runnable r) 方法调用 Message.obtain() 方法从Message类中自带的缓存队列(被回收的message对象组成的链表)中获取 message对象,如果没有缓存对象,则new Message(),并给Message.obtain() 返回的message对象设置mCallback为r,接下来将调用sendMessageDelayed(msg, 0) 并最终入队
3. Looper在处理message时,会调用message.target.dispatchMessage() 方法,target则是将该message传入MessageQueue的handler对象,dispatchMessage()方法如下
public void dispatchMessage(@NonNull Message msg) {
if (msg.callback != null) {
//存在message callBack
handleCallback(msg);
} else {
if (mCallback != null) {
//存在handler callBack
if (mCallback.handleMessage