Как использовать MemoryFile для выполнения IPC в Android?

MemoryFile задокументирован как обертка вокруг Android-пепла: https://developer.android.com/reference/android/os/MemoryFile.html

Ашмем, конечно, используется для выполнения IPC. Однако в текущем API MemoryFile я не вижу ничего, способствующего IPC.

Скажем, в процессе ИИ хочет поделиться битмапом с другими процессами. И я хочу добиться этого с помощью MemoryFile. В процессе А:

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 есть метод, возвращающий дескриптор файла. Я могу передать этот файловый дескриптор процессу B через Binder. Затем Процесс B может создать MemoryFile с этим файловым дескриптором и читать данные. Однако в MemoryFile нет API, способствующего этому. Как я могу сделать IPC с MemoryFile тогда?

1 ответ

Если вы хотите поделиться изображением с помощью общей памяти, вы можете использовать эту библиотеку общей памяти (ссылка). Я протестировал демо-приложения, и кажется, что вы делаете то, что хотите.

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

Более подробная информация в документации

Другие вопросы по тегам