深入解析Android7.0 Native层MessageQueue

0 下载量 88 浏览量 更新于2024-08-29 收藏 326KB PDF 举报
"本文深入解析了Android 7.0中的MessageQueue机制,重点在于其在Native层的实现。文章首先介绍了MessageQueue在Android消息处理系统中的关键角色,与Handler和Looper的紧密关系。然后,详细探讨了MessageQueue的创建过程,包括Looper的prepare函数调用,以及如何在Java和Native层之间交互。 在创建MessageQueue的过程中,Looper的`prepare`函数被调用,确保每个线程只有一个Looper实例。接着,Looper构造器中创建了MessageQueue对象。在MessageQueue的构造函数中,调用了`nativeInit`方法进入Native层。 在Native层,`android_os_MessageQueue_nativeInit`函数负责初始化MessageQueue的Native实体。这个函数在C++代码中定义,它创建了一个`NativeMessageQueue`对象,并可能涉及文件描述符(fd)的设置,这通常与Epoll机制有关,Epoll是Linux系统中用于高效I/O事件通知的一种机制。 MessageQueue在Native层的核心功能是等待并处理消息。它使用Epoll来监听多个文件描述符(如管道、信号量等),这些描述符与消息的生产和消费密切相关。当有新消息到达时,Epoll会通过`poll`函数通知MessageQueue,然后MessageQueue将消息传递给Looper,Looper再分发给相应的Handler进行处理。 在MessageQueue内部,`mPtr`变量通常是一个长整型(long),它实际上是一个指向Native结构体的指针,这个结构体包含了与Native层交互所需的所有信息,如Epoll句柄、唤醒机制(如管道或文件描述符)等。`wake`函数可能被用来唤醒被阻塞的`poll`调用,以便处理新消息。 总结起来,Android 7.0的MessageQueue在Java层提供了一种抽象,而在Native层实现了高效的消息调度和处理。这种设计使得Android能够以低延迟和高并发性处理大量消息,是Android应用线程间通信和异步操作的关键组件。理解MessageQueue的工作原理对于优化性能和调试复杂的多线程问题至关重要。
2010-08-06 上传
一、消息处理中的主要概念 “消息”是在两台计算机间传送的数据单位。消息可以非常简单,例如只包含文本字符串;也可以更复杂,可能包含嵌入对象。 消息被发送到队列中。“消息队列”是在消息的传输过程中保存消息的容器。消息队列管理器在将消息从它的源中继到它的目标时充当中间人。队列的主要目的是提供路由并保证消息的传递;如果发送消息时接收者不可用,消息队列会保留消息,直到可以成功地传递它。 “消息队列”是 Microsoft 的消息处理技术,它在任何安装了 Microsoft Windows 的计算机组合中,为任何应用程序提供消息处理和消息队列功能,无论这些计算机是否在同一个网络上或者是否同时联机。 “消息队列网络”是能够相互间来回发送消息的任何一组计算机。网络中的不同计算机在确保消息顺利处理的过程中扮演不同的角色。它们中有些提供路由信息以确定如何发送消息,有些保存整个网络的重要信息,而有些只是发送和接收消息。 “消息队列”安装期间,管理员确定哪些服务器可以互相通信,并设置特定服务器的特殊角色。构成此“消息队列”网络的计算机称为“站点”,它们之间通过“站点链接”相互连接。每个站点链接都有一个关联的“开销”,它由管理员确定,指示了经过此站点链接传递消息的频率。 “消息队列”管理员还在网络中设置一台或多台作为“路由服务器”的计算机。路由服务器查看各站点链接的开销,确定经过多个站点传递消息的最快和最有效的方法,以此决定如何传递消息。