Looper, MessageQueue, Handler, thread关系的简单描述 2012-07-13 15:07:53
Looper是一个循环,在这个循环里,监视fd(file descrption)的读写事件;
Looper是一个循环,在这个循环里,监视fd(file descrption)的读写事件;
MessageQueue是用来容纳从looper中得到的事件;
Handler是事件的处理对象,其中的HandleEvent()是回调处理函数;
这些Looper, MessageQueue, Handler往往是运行在一个线程thread中。
mMessageQueue->getLooper()->addFd(fd, 0, ALOOPER_EVENT_INPUT, handler, data);
这样looper就会监fd的输入事件(ALOOPER_EVENT_INPUT), 当有事件发生,会以参数data调用handler,handler是const sp<LooperCallback>,
mMessageQueue->getLooper()->addFd(fd, 0, ALOOPER_EVENT_INPUT, handler, data);
这样looper就会监fd的输入事件(ALOOPER_EVENT_INPUT), 当有事件发生,会以参数data调用handler,handler是const sp<LooperCallback>,
它里面的handleEvent()被调
用:virtual int handleEvent(int receiveFd, int events, void* data);
创建looper的线程就是最后监视和callback处理的线程。
fd一般用socketpair产生,写fd在写进程里,读fd在这里。a