0

MemoryFile 被记录为围绕 Android 的 Ashmem 的包装器:https ://developer.android.com/reference/android/os/MemoryFile.html

当然,Ashmem 用于执行 IPC。然而,在 MemoryFile 的当前 api 中,我看不到任何促进 IPC 的东西。

假设在进程中 AI 想要将位图共享给其他进程。我想用 MemoryFile 来实现这一点。在过程 A 中:

file = new MemoryFile("BitmapFile", 20 * 1024 * 1024);
final Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.ipc);
final ByteArrayOutputStream stream = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
final byte[] byteArray = stream.toByteArray();
file.writeBytes(byteArray, 0, 0, byteArray.length);

在此之后,应该已经创建了 Ashmem 对象并将位图数据写入其中。现在我想与进程 B 共享它。我期待的是 MemoryFile 中有一个方法返回文件描述符。我可以通过 Binder 将此文件描述符传递给进程 B。然后进程 B 可以用这个文件描述符创建一个 MemoryFile 并读取数据。但是 MemoryFile 中没有 api 来促进这一点。那我怎么能用 MemoryFile 做 IPC 呢?

4

1 回答 1

0

如果您想使用共享内存共享图像,您可以使用此共享内存库(链接)。我已经测试了演示应用程序,它似乎可以完成您想要完成的工作。

Bitmap bm = BitmapFactory.decodeResource(mContext.getResources(), mBitmapRes);
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bm.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] bmBytes = stream.toByteArray();
mSharedRegion.writeBytes(bmBytes, 0, 0, bmBytes.length);

文档中的更多详细信息

于 2017-04-09T23:20:28.300 回答