我不确定这个函数是如何工作的。这是原型:
int ALooper_addFd(ALooper*looper, int fd, int ident, int events, ALooper_callbackFunc callback, void *data);
这个"数据"指针是什么?如果回调不为NULL,则"data"应为传递给回调的自定义数据。但是,如果回调为NULL,那么"data"参数的作用是什么?或者在这种情况下,它也必须为NULL?
有关于这方面的详细文件吗?谢谢你的建议!
它是一个指向任意数据的指针,如果您在应用程序中需要,可以对其进行设置。
除了作为回调的参数发送外,当您调用ALooper_pollAll
或ALooper_pollOnce
时,data
指针还将写入outData
参数引用的内存。
您可以看到Android Native App Glue作为一个示例。在这种情况下,data
指向由glue定义的android_poll_source
结构,为了使glue将活套文件描述符中的命令转换为输入和APP_CMD
事件,当您从活套接收到事件时,必须调用(android_poll_source *)data
中的process
函数:
int ident, events;
struct android_poll_source *source; // source is the data here
while ((ident = ALooper_pollAll(0, NULL, &events, (void **)(&source))) >= 0) {
if (source) {
source->process(source->app, source);
}
}