Android学习之消息机制相关类介绍

转载:http://blog.csdn.net/ldj299/article/details/6399964

Message(消息):

  是消息队列中的组成单元。里面包含了数据对象。

  获得Message最好的方式是通过obtain()函数获取,有多个obtain()函数,只是传入参数不同,功能是一样的。obtain()作用是从消息池中取出一个Message,节约资源。如果没有则新建一个Message返回。

 

Runnable :

  和Java里的Runnable是有点区别的,Android API对它的解释是:代表一个可以被执行的命令。

 

Message Queue(消息队列):

这是Android消息机制的基础,里面有很多的消息(Message)。

 

并且不同的消息有不同的优先级,消息在Android系统中使用MessageQueue的enqueueMessage(Message msg,Long when)来加入消息队列的,所以消息的优先级的区分是根据when来决定的。

 

Handler(管理者):

  负责Message的发送与接收。Handler有两种方式发送消息:

一种是postXXX() ,如:post(Runnable) ,postDelayed(Runnable,long)

在Handler.postXXX(Runnable...) 后,系统调用Handler.getPostMessage(Runnable)将Runnable赋值给Message的callback属性。最后将返回的Message加入消息队列。

源代码如下:

  1. private final Message getPostMessage(Runnable r) {  
  2.         Message m = Message.obtain();  
  3.         m.callback = r;  
  4.         return m;  
  5. }  
 

另一种是sendXXX(),如:sendMessage(Message),sendMessageDelayed(Message,long),

 

         Handler对消息的发送最终都是调用MessageQueue.enqueueMessage()这个方法将Message放入队列中的。

 

Looper(循环管理):

  管理绑定线程的消息队列和消息处理。一个Looper对应一个MessageQueue,创建Looper的同时会创建MessageQueue。Looper对象不断的向MessageQueue中获取Message,通过Message携带的信息交给相应的Handler处理。Looper就是Handler和MessageQueue之间的桥梁。

 

Thread(线程):

  和Java里的Thread差不多,默认新建的线程是没有绑定Looper对象的,需要用Looper.prepare()初始化线程,并且绑定Looper,Looper.loop()开始循环的处理线程中MessageQueue的消息。

 

 

HandlerThread(带Looper对象的线程):

  继承自Thread的一个类,它自己里面调用了Looper.prepare() 和 Looper.loop() 这样方法,所以一创建就会有消息队列和Looper对象。

 

一个线程对应一个MessageQueue(消息队列)一个Looper,但是一个线程可以有多个Handler。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值