Совместное использование буфера между службой Java и собственным приложением с минимальными издержками доступа
Я пытаюсь настроить область общей памяти между службой Android Java и собственным процессом. Нативный процесс не имеет компонента Java, является чисто C++ и вызывается из оболочки непосредственно из командной строки.
Я считаю, что я могу использовать пепел и связующее вещество для достижения этой цели. Сначала вызовите ashmem_create_region, вызовите mmap для результата, затем передайте полученный fd другому процессу, используя связыватель. Другой процесс выполняет mmap для fd и, таким образом, получает доступ к совместно используемой области.
Я понимаю, что это работает между двумя приложениями Java, а также между приложением или службой Java и процессом в основном режиме.
Мне интересно, как сервис Java может эффективно обращаться к данным. Я хочу использовать этот механизм для копирования буфера с плавающей точкой, размером около 300 МБ, из нативного приложения в службу Java. Теперь службе Java требуется доступ к этим данным без накладных расходов, как, например, в JNI. Какова наилучшая стратегия для выделения разделяемой области, чтобы нативная программа могла быстро копировать плавающие объекты в буфер, а служба Java могла получить доступ к значениям с минимальными издержками?
Спасибо
1 ответ
Посмотрите на этот пример. Он создает общую память между Java и нативными приложениями. https://github.com/vecio/AndroidIPC