Android ALOPER_addFd数据参数

Android ALOPER_addFd数据参数,android,native-code,android-looper,Android,Native Code,Android Looper,我不确定这个函数是如何工作的。这是原型: int ALooper_addFd(ALooper*looper, int fd, int ident, int events, ALooper_callbackFunc callback, void *data); 这个“数据”指针是什么?如果回调函数不为NULL,“data”应该是传递给回调函数的自定义数据。但是,如果回调为NULL,“data”参数用于什么?或者它也必须是空的,在这种情况下 有关于这方面的详细文件吗?谢谢你的建议 它是一个指向任意

我不确定这个函数是如何工作的。这是原型:

int ALooper_addFd(ALooper*looper, int fd, int ident, int events, ALooper_callbackFunc callback, void *data);
这个“数据”指针是什么?如果回调函数不为NULL,“data”应该是传递给回调函数的自定义数据。但是,如果回调为NULL,“data”参数用于什么?或者它也必须是空的,在这种情况下


有关于这方面的详细文件吗?谢谢你的建议

它是一个指向任意数据的指针,您可以在应用程序中需要时设置它

调用
ALooper\u pollAll
ALooper\u pollOnce
时,
data
指针除了作为参数发送到回调外,还将写入
outData
参数引用的内存

你可以看到Android原生应用程序Glue就是一个例子。在这种情况下,
数据
指向glue定义的
android_poll_source
结构,要使glue将来自活套文件描述符的命令转换为输入和
APP_CMD
事件,必须调用
(android_poll_source*)中的
进程
函数数据
当您从活套接收到事件时:

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);
    }
}