在Android原生中,我使用API ashmem_create_region创建了共享内存,如
fd = ashmem_create_region("SharedRegionName", 1024);
char* base_address = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
这会创建我传递给应用程序的原生 int fd 。
内部应用程序我试图将128个字节写入此共享内存,该内存无法写入并返回写入len = 0。
ParcelFileDescriptor pfd = ParcelFileDescriptor.adoptFd(native.getFD());
Log.d(TAG, "pfd : "+pfd );
FileDescriptor fd = pfd.getFileDescriptor();
FileOutputStream fos = new FileOutputStream(fd);
FileChannel fc = fos.getChannel();
ByteBuffer bytebuf = ByteBuffer.allocateDirect(128);
for (int i=0; i<128; i++) {
bytebuf.put((byte)(i));
}
try {
int len = fc.write(bytebuf);
Log.d( TAG, "fc.len "+len);
} catch (IOException e) {
e.printStackTrace();
}
日志是: - pfd:{ParcelFileDescriptor:FileDescriptor [51]}
fc.len 0
我不确定,但看起来平台不允许或阻止在共享内存上写入,如果有人尝试过,请确认或在此过程中出现问题时请告诉我。