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 呢?