2016-12-16 5 views
0

MemoryFileがAndroidのAshmemのラッパーとして文書化されていますhttps://developer.android.com/reference/android/os/MemoryFile.htmlMemoryFileを使ってアンドロイドでIPCを実行するにはどうすればいいですか?

Ashmem、当然のことながら、IPCを実行するために使用されます。しかし、MemoryFileの現在のAPIでは、IPCを促進するものは何も見当たりません。

プロセスAについて他のプロセスとビットマップを共有したいと考えています。私はこれを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にファイル記述子を返すメソッドがあることです。このファイル記述子をバインダー経由でプロセスBに渡すことができます。プロセスBは、このファイル記述子を使用してMemoryFileを作成し、データを読み取ることができます。しかし、これを容易にするMemoryFileにはapiはありません。 MemoryFileでIPCを実行するにはどうすればいいですか?

答えて

-1

共有メモリを使用してイメージを共有する場合は、この共有メモリライブラリ(link)を使用できます。私はデモアプリケーションをテストしており、それはあなたが達成したいことをするようです。 Documentation

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

詳細

関連する問題