多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
![](https://markdown-1258186581.cos.ap-shanghai.myqcloud.com/20190606104746.png) [Android多线程系列文章](https://blog.csdn.net/Sean_css/column/info/21723) [Android 多线程之 Handler 源码分析](https://mp.weixin.qq.com/s?__biz=MzI2MzQzNzU5Mg==&mid=2247483729&idx=1&sn=a3890e6ed685f344713ca3bac67c8a06&chksm=eabaad26ddcd24306fa3446412cd35e33dbbe78fd57f217e3cd1d9b51fa33a367f99524ea380&token=1734300795&lang=zh_CN#rd) 1. `MessageQueue` 中存放的是 `Message` ,一个 `MessageQueue` 中有可以多个 `Message`,或者没有 `Message`(此时阻塞) 2. 一个线程(`Thread`)中有一个 `Looper` ,并且只有一个 `MessageQueue` ,`Looper` 去循环 `MessageQueue`,有消息就发给 `Handler` 处理。 3. 一个 `Handler` 只能绑定一个 `Looper`,但是一个 `Looper` 可以和多个 `Handler` 相关联 `Handler`在发送消息的时候,然后在` enqueueMessage`的时候就会把把发送消息的` Handler` 赋值给这个` Message`对象的`target` 属性。 ```java private boolean enqueueMessage(MessageQueue queue, Message msg, long uptimeMillis) { msg.target = this; if (mAsynchronous) { msg.setAsynchronous(true); } return queue.enqueueMessage(msg, uptimeMillis); } ``` 最后在` Looper`从` MessageQueue`中取出消息的时候,用` Message`对象中持有的` Handler`对象的` HandleMessage`方法去处理消息。 ```java msg.target.dispatchMessage(msg); ```