Android消息机制深度解析:Message、MessageQueue、Looper与Handler

需积分: 15 1 下载量 46 浏览量 更新于2024-09-15 收藏 88KB DOC 举报
"Message, MessageQueue, Looper, 和 Handler 是Android系统中处理线程间通信的核心组件,尤其在UI线程与工作线程的交互中扮演着重要角色。它们一起构建了一个消息传递机制,使得应用程序能够以异步的方式处理事件和更新界面。 1、Message(消息): Message是信息的载体,它封装了需要传递的数据和执行的操作。Message对象通常通过Message类的静态方法`obtain()`来获取,这个方法会尝试从Message池中复用已存在的Message实例,以节省内存。Message池的存在是为了避免频繁创建和销毁对象导致的性能开销。Message提供了设置目标Handler、携带数据以及设置消息优先级等方法。当不再需要Message时,可以通过Handler的`removeMessages()`方法将其从MessageQueue中移除并放回Message池。 2、MessageQueue(消息队列): MessageQueue是一个先进先出(FIFO)的数据结构,用于存储待处理的消息。每个线程最多只能有一个MessageQueue,主线程在创建时会默认创建一个与之关联的Looper和MessageQueue。其他线程需要手动调用Looper的`prepare()`方法来创建MessageQueue。MessageQueue的主要任务是管理Message的入队和出队,以及配合Looper进行消息的处理。 3、Looper(循环器): Looper是MessageQueue的管理者,它负责不断检查MessageQueue是否有新消息到来。每个Looper都与一个线程绑定,并且每个线程只有一个Looper。Looper的`loop()`方法会进入一个无限循环,不断地从MessageQueue中取出Message并分发给对应的Handler进行处理。主线程的Looper会在应用启动时自动初始化,而其他线程需要通过`prepare()`手动初始化,然后通过`loop()`开始消息循环。 4、Handler(处理器): Handler是Message的接收者和处理器,它与特定的线程(通常是UI线程)相关联。开发者通过Handler发送Message到MessageQueue,Looper会从队列中取出这些Message并交给相应的Handler进行处理。Handler提供了`sendMessage()`和`post()`等方法来发送Message或Runnable对象,以及`handleMessage()`方法来处理接收到的消息。 总结来说,MessageQueue存储消息,Looper负责从队列中取出消息并分发,Handler接收并处理消息。这种机制确保了UI线程的流畅性,因为所有对UI的操作都在同一个线程中进行,避免了线程同步的问题。而在工作线程中处理耗时任务后,通过Message和Handler可以安全地向UI线程发送更新界面的请求,从而实现了异步编程。"