0

我正在尝试在 Android Java 服务和本机进程之间建立一个共享内存区域。本机进程没有 Java 组件,纯粹是 C++,并且直接通过命令行从 shell 调用。应用程序需要将完整图像(目前大约 300 MB)发送到服务。图像是浮点数据。

我相信我可以使用 ashmem 和 binder 来实现这一点。首先调用 ashmem_create_region,对结果调用 mmap,然后使用 binder 将结果 fd 传递给另一个进程。另一个进程在 fd 上执行 mmap,从而获得对共享区域的访问权限。

我知道这适用于两个 Java 应用程序,也适用于 Java 应用程序或服务与本机模式进程。

我现在想知道 Java 服务如何有效地访问数据。我想使用这种机制将大约 300MB 大小的浮点缓冲区从本机应用程序复制到 Java 服务。现在,Java 服务需要访问这些数据而无需高昂的开销。有人告诉我,由于从 Java 服务访问数据的成本,JNI 开销阻止了使用这种技术。这个对吗?有没有另一种方法可以做到这一点而不会产生高昂的开销?

比如Java服务能不能把数据分配成一个ByteBuffer,然后让native服务通过指针来访问呢?

谢谢

4

0 回答 0