Android的Handler、MessageQueue、Runnable和Looper
Android的Handler、MessageQueue、Runnable和Looper
我希冀着 发表于2年前
Android的Handler、MessageQueue、Runnable和Looper
  • 发表于 2年前
  • 阅读 42
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

Handler、MessageQueue、Runnable和Looper相信大家在Android开发过程中这四个类一定不陌生,但是面试的时候经常问道。我们先来看张图:

再来看看这张图

从上面两张图片我们可以看出,Runnable和Message都在MessageQueue里面,然后Looper从MessageQueue里面获取交给Handler来处理,到最后活的结果。需要注意的是:MessageQueue里面存放的Object一定是同类型的。总结一句话就是:

Looper不停的从MessageQueue里面获取Message,然后交给Handler处理,并得到相应结果。

说到Handler我们不得不提一下Thread了,我们再看另张图片:

可以总结为:

  • 每个Thread对应一个Looper
  • 每个Looper对应一个MessageQueue
  • MessageQueue里面可以有多个Message
  • 每个Message最多指定一个Handler

所以Thread和Handler是一对多的关系!接下来我们具体看看Handler

public void dispatchMessage(Message msg);   //Message分发处理
public void handlerMessage(Message msg);   //处理Message

首先Looper从MessageQueue获取Message会先调用Handler.dispatchMessage分发消息,所以在我们特定需求来重新dispatchMessage和handlerMessage来改变它的默认行为。Handler发送消息有send和post两种方式,send和post的区别:send和post都是将message压入Messagequeue,而send是直接处理的函数参数是Message;post则是先把其他类型的“零散”信息转换成Message,在调用send系列函数来执行下一步操作。

 

 

 

 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
我希冀着
粉丝 70
博文 44
码字总数 26777
×
我希冀着
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: