Message 消息处理详解

来源:互联网 发布:新浪微博 mac 客户端 编辑:程序博客网 时间:2024/05/21 17:52
MessageQueue:
消息队列,存放消息的地方,按照先进先出FIFO规则执行,每一个线程只可以拥有一个MessageQueue。在创建Looper对象会创建一个MessageQueue对象。

Message:
消息对象,MessageQueue中存放的对象。一个MessageQueue中可以包含多个Message对象。可以通过Message.obtain()或者Handler.obtainMessage()获取Message对象。但是这并不一定是直接创建一个新的实例,而是先从消息池中看有没有可用的Message实例,存在则直接取出返回这个实例。如果消息池中没有可用的Message实例,则才用给定的参数创建一个Message对象。调用removeMessages()时,将Message从MessageQueue中删除,同时放入到消息池中。

Looper:
操作MessageQueue。一个Looper对应一个MessageQueue。通过调用Looper.myLooper()可以获得当前线程的Looper对象。Looper从MessageQueue中取出Message然后,交由Handler的handleMessage()进行处理。处理完成后,调用Message.recycle()将其放入消息池中。

Handler:
消息的处理者。handler负责将需要传递的信息封装成 Message对象,然后调用sendMessage()方法将消息放入MessageQueue中。当MessageQueue循环到该Message,调用相应的handler对象的handleMessage()方法对其进行处理。Handler都可以共享同一Looper和MessageQueue。



原创粉丝点击