Android中消息传递机制

(1) Handler的作用是把消息加入特定的Looper所管理的消息队列中,并分发和处理消息队列中的消息。每个handler都和一个looper关联,Looper负责管理线程的消息队列并启动消息循环(消息队列是一个单链表实现的)。

(2)Looper在创建的时候会调用prepare()生成一个looper对象,并且一个线程只能创建一个looper对象,在looper的构造方法里会创建一个消息队列,所以一个线程有唯一的一个消息队列。之后looper调用loop()循环消息队列,每取出一个message,就把这个message发送给对应的handler。

(3) Handler在创建的时候可以指定一个Looper对象,如果不指定就利用当前线程的Looper对象和handler关联。Handler通过调用sendMessage()、或者post(Runnable)(把Runnable对象赋值给了message的callback属性)可以把message插入到跟handler关联的Looper的消息队列中,插入的时候给message的Target属性赋值为当前的handler;looper进入消息循环后,通过消息队列的next()方法获取到message后,根据message.target属性,调用dispatchMessage(msg),把message传递给对应的handler,之后handler回调handleMessage()或者Runnable的run()方法,处理消息。

(4)应用启动的时候就已经为主线程创建了Looper,并且调用了loop(),如果要在子线程中创建消息队列和消息循环的话,要先调用prepare()创建消息队列,再调用loop()进入消息循环。

附加:looper.loop()中是死循环,主线程为什么没有阻塞?


参考:

http://mp.weixin.qq.com/s?__biz=MzI0MjE3OTYwMg==&mid=2649548084&idx=1&sn=9091f6c33d37a9fb082ac74b8628b478

http://blog.csdn.net/qq_32583189/article/details/52253147

消息传递机制、源码参考:

http://blog.csdn.net/liuhe688/article/details/6407225/

http://blog.csdn.net/lmj623565791/article/details/38377229

http://www.cnblogs.com/xsyulinzi/p/4323662.html

http://www.cnblogs.com/codingmyworld/archive/2011/09/14/2174255.html



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值