这里写自定义目录标题
1.handler的send、post最后都会来到enqueueMessage这个函数,这个函数主要干了什么呢?
首先需要知道Message是一个类似链表的类,他里面有Message next这个成员变量。mMessages是一个链表,他首先判断mMessages是否为空,或者新来的msg他的时间是不是比我这个链表更早,如果是,那么msg的next指针指向mMessages,也就是msg会插进队列的最前面。
正常情况下,遍历mMessages链表,如果到了结尾,或者某个message的时间比新来的msg时间要晚,则将msg插入其中。
2.接下来将是怎么把msg取出来的。首先我们先调用looper类的loop函数,loop函数是在ActivityThread的main函数里面自动创建调用的,loop会从当前Thread获取,若!= null,则会报错,这也就解释了为什么一个Thread对应一个loop。在loop函数里有一个无限循环的for循环,这样主线程就一直有程序,一直能存活
真正的取Message是通过next,然后再调用dispathchMessage
先判断是post海事send;再判断需不需要拦截