4

Android Java サービスとネイティブ プロセスの間に共有メモリ領域を設定しようとしています。ネイティブ プロセスには Java コンポーネントがなく、純粋に C++ であり、コマンド ラインによってシェルから直接呼び出されます。

これを達成するには、ashmem とバインダーを使用できると思います。最初に ashmem_create_region を呼び出し、結果に対して mmap を呼び出し、次にバインダーを使用して結果の fd を他のプロセスに渡します。他のプロセスは fd で mmap を実行し、それによって共有領域へのアクセスを取得します。

これは 2 つの Java アプリ間で機能し、Java アプリまたはサービスとネイティブ モード プロセス間でも機能することを理解しています。

Java サービスがどのようにしてデータに効率的にアクセスできるのか疑問に思っています。このメカニズムを使用して、サイズが約 300MB のフロートのバッファーをネイティブ アプリから Java サービスにコピーしたいと考えています。Java サービスは、JNI で発生するようなオーバーヘッドなしでこのデータにアクセスする必要があります。ネイティブ プログラムが float をバッファにすばやくコピーし、Java サービスが最小限のオーバーヘッドで値にアクセスできるように、共有領域を割り当てるための最善の戦略は何ですか?

ありがとう

4

1 に答える 1