Looper-Native层调用逻辑

64 阅读1分钟

Native层

监听某个设备

// aosp/system/core/libutils/include/utils/Looper.h
int addFd(int fd, int ident, int events, Looper_callbackFunc callback, void* data); 
int addFd(int fd, int ident, int events, const sp<LooperCallback>& callback, void* data);

具体实现在 aosp/system/core/libutils/Looper.cpp的addFd函数中

Image_20230314160815.png 这段代码主要做了如下几件事:

  1. 把要监测的文件描述符fd、事件标识events、回调函数指针callback、以及data封装成一个Request对象
  2. 调用epoll_ctl对文件描述符fd进行监测。
  3. 把Request对象添加到mRequests列表(KeyedVector<int, Request> mRequests)

消息处理逻辑(Looper.pollOnce),调用上面封装的callback的handleEvent函数进行处理

Image_20230314161339.png