如何使用MemoryFile在android中执行IPC?

时间:2016-12-16 15:04:58

标签: android ashmem

MemoryFile被记录为Android的Ashmem:https://developer.android.com/reference/android/os/MemoryFile.html

的包装器 当然,Ashmem用于执行IPC。然而,在MemoryFile的当前api中,我没有看到任何促进IPC的内容。

在进程A中说我想将Bitmap共享给其他进程。我想用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对象并将位图数据写入其中。现在我想与Process B共享它。我期待的是MemoryFile中有一个返回文件描述符的方法。我可以通过Binder将此文件描述符传递给Process B.然后,进程B可以使用此文件描述符创建MemoryFile并读取数据。然而,MemoryFile中没有api可以促进这一点。那么如何使用MemoryFile进行IPC?

1 个答案:

答案 0 :(得分:-1)

If you want to share an image using share memory you can use this Shared Memory library (link). I have tested the demo apps and it seems to do what you want to accomplish.

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);

More details in the Documentation