Я пишу приложение (на Android), которое использует как Java-код, так и нативный код.Время от времени, звук должен быть воспроизведен.К сожалению, нативный код не имеет API (или, по крайней мере, стабильных / официальных) для аудио, но только он знает, когда нужно воспроизвести звук.Я придумал два способа сделать это:
Есть функция, которая отслеживает (в очереди или еще много чего) звуки, которые необходимо воспроизвести.Когда вызвано, это возвратит строку, дающую название звука, который должен быть воспроизведен.Таким образом, Java-код может вызывать эту функцию, пока не получит пустую строку, в которой воспроизводится звук.
Возвращает массив строк звуков, которые необходимо воспроизвести, илипустой массив, если его нет.
Но потом я понял, что вызовы JNI стоят дорого.И для этого все еще требуется, чтобы код Java вызывал функцию каждую итерацию или около того, чтобы убедиться, что она играет правильно.И особенно плохо для # 1, так как он должен был бы вызывать каждый оставшийся звук для воспроизведения, хотя и не намного хуже, чем я мог бы себе представить.
Итак, звонки JNI слишком дороги, чтобы сделать это неосуществимым?Если нативный код каким-то образом информирует java-код о том, что звуки нужно воспроизводить без предварительного запроса java-кода (таким образом, выполняется меньше вызовов JNI).Однако я заметил, что код отрисовки в примере Android OpenGLES ES 2 ndk прошел через JNI, и это казалось нормальным, но опять же, он нарисовал только треугольник и фон.
ЯЯ не уверен, как мне будет это профилировать, кроме как сделать оба и посмотреть, что работает лучше, поэтому я был бы очень признателен за ваш вклад.Большое спасибо.