NDK是否为消息队列提供支持?

时间:2018-02-16 14:20:21

标签: android-ndk ipc message-queue

我正在尝试使用android ndk构建一个共享库。运行ndk build

时出现此错误
fatal error: 'mqueue.h' file not found

根据我对谷歌搜索的理解,问题在于Android确实支持某些POSIX或System V功能(如消息队列)。

所以我想知道这是否正确?如果是的话,我的选择是什么 - 我可以对我的应用程序进行哪些更改以模仿消息队列?

(我在Ubuntu 14.04 PC上使用android-ndk-r16b)

1 个答案:

答案 0 :(得分:2)

是的,Android上不支持POSIX消息队列,以及其他一些SysV IPC机制。简而言之,这是因为可能导致无法恢复的资源泄漏。这不仅适用于“忘记”释放所获得的IPC资源而且适用于每个资源的错误应用程序。原因是Android集中使用kill(app_pid, SIGKILL)从后台进程回收系统资源,刚刚由用户启动。结果应用程序死亡,没有机会执行拆卸。内核无法释放IPC资源,因为它们可能以不可预测的方式被其他进程共享(与文件描述符和虚拟内存不同)。请记住,Android主要在资源受限的硬件上运行,因此某些此类资源重新排列是不可避免的。 更多背景是here。旧的NDK软件包包含此文档,但在某些时候它已被删除。

Android上的IPC替代方法通常包括基于Binder的解决方案。在本机代码中,您可以使用ashmem为共享内存段提供接口。最新的平台版本向其公开了公共API,请参阅<android/sharedmem.h>。但是对于较旧平台的事件,您可以通过与ashmem驱动程序的直接交互来实现类似的功能,请参阅libcutils来源。

最后,你仍然可以使用管道,UNIX域套接字和可能名为管道(当然,如果底层文件系统支持这样的inode)。