Handler 消息处理器,顾名思义他是一个用来处理消息的工具。常见的搭配有Handler,Looper,Message,MessageQueue。
从该图可以看出一个程序可以有多个线程,但只能有一个Looper和一个MessageQueue,而Handler和Message的数量则不受限制。因此我们也能分析出它的工作模式,那就是所有的Message汇聚成一个MessageQueue,然后再由Looper交给Handler处理。
Looper的使用方法相当的简单,因为他的源码上附有一个简单的Demo。
Handler和Thread一样窦世友Linux底层处理。这也就是说不好关闭,建议一般别用。
Handler源码分析:
恕在下无能,只能看出里面有很多构造。以及handleMessage,以及其他的类似getMessage的方法.
handleMessage():当接收到其他线程发送的消息触发。
注意,他没有run方法。
Looper源码简易分析:
ThreadLocal是唯一的。
ThreadLocal是一个List类型,及长度可变,先进先出。
prepareMainLooper里面的锁是类锁,这就意味着一次只能访问一个。
最重要的当然是内部的loop()方法(为了自己的自学能力请亲自翻看源码)
MessageQueue,消息队列,没啥好解释的,值得一提的就是他还有一个接口。
synchronized 锁,以类为锁,则该方法一次只能有一个对象访问,防治同步数据一样。
RunAble:接口。轻量级线程。只能通过主线程或子线程启动。只需要重写Run方法。