handler源码解析

1,Handler


handler的sendMessage会调用消息队列的enqueueMessage方法将handler本身绑定到msg消息上,然后放入消息队列中。而消息队列主要提供了enqueueMessage入队和next出队的操作,采用的是单链表结构。也就是handler在创建的时候就已经和创建handler的线程以及线程持有的looper以及消息队列绑定了。

2,Looper


Looper持有一个静态的final的成员变量ThreadLocal,并且在创建的时候会绑定一个MessageQueue。


当Looper调用prepare的时候会得到当前线程绑定的ThradLocalMap里面的looper,如果没有就为当前线程设置一个Looper。(ThradLocalMap是线程的一个成员变量,在get的时候如果为空的话就会创建一个并且赋值给线程)调用loop方法的时候就是循环从消息队列取出消息进行处理。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容