Android的Handler、MessageQueue、Runnable和Looper

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

101705_IsUq_127095.png

再来看看这张图

101636_59tl_127095.png

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

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

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

103357_79w5_127095.png

可以总结为:

  • 每个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系列函数来执行下一步操作。

 

 

 

 

转载于:https://my.oschina.net/huangsm/blog/716181

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值