原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。http://blog.csdn.net/chwan_gogogo/article/details/46953549
前言
我们知道Java 层的Looper 的消息队列在没有消息处理的时候,会wait在MessageQueue.next() 函数里,对于MessageQueue.next() 函数是如何实现的wait,却是一知半解。而且Android Framework部分有很多在Native层使用Looper 监听文件描述符的用法,比如InputDispatcher等,了解Android Native 层Looper的实现,可以对整个Android系统的消息循环机制有更深入的理解。
代码版本
http://androidxref.com/6.0.1_r10/xref/system/core/include/utils/Looper.h
http://androidxref.com/6.0.1_r10/xref/system/core/libutils/Looper.cpp
Looper接口说明
Function | Desription |
---|---|
Looper(bool allowNonCallbacks); | Looper 构造函数 |
static sp< Looper> prepare(int opts); | 如果该线程没有绑定Looper,才创建Looper,否则直接返回。 |
int pollOnce(int timeoutMillis, int* outFd, int* outEvents, void** outData); | 轮询,等待事件发生 |
void wake(); | 唤醒Looper |
void sendMessage(const sp< MessageHandler>& handler, const Message& message); | 发送消息 |
int addFd(int fd, int ident, int events, Looper_callbackFunc callback, void* data); | 添加要监听的文件描述符fd |
Class Diagram
Looper 类图如下:
在sendMessage()时,需要指定