Я портирую приложение для iOS, созданное в JUCE, на Android (в настоящее время в бета-версии). У меня есть какое-то странное поведение, когда я получаю аудио глюки и пропуски кадров GUI, которые появляются, только когда НЕ касаются экрана.
Приложение использует OBOE с JUCE 5.4.0 и скомпилировано только для Android 8.0 и выше. Странно, эта проблема возникает только на Galaxy S9 (тесты в порядке на Note 8, Note 9, Xiaomi mi A1 и некоторых других устройствах). Я пробовал с новым заводским сбросом на Galaxy S9.
Я новичок в разработке Android.
То, что вы испытываете, вероятно, будет масштабатором частоты процессора на Galaxy S9, который агрессивно уменьшает частоту процессора, когда к экрану не прикасаются. Это приводит к недостаточной вычислительной полосе пропускания, в результате чего ваше приложение занимает слишком много времени внутри звукового обратного вызова, что приводит к недоработке / сбоям.
Чтобы проверить это использовать systrace и профилировщик Android Studio. Systrace покажет вам как потери звука, так и частоту процессора.
Прикоснитесь к экрану во время трассировки, и вы увидите увеличение частоты процессора, а затем вскоре падение.
Если это так, вы можете попробовать несколько вещей:
-Ofast
или же -O3
StabilizedCallback
учебный класс в Oboe, который был разработан именно для этой цели — он будет пытаться сохранить вращение процессора, чтобы избежать его уменьшения. AudioStream::getUnderruns()
) и уменьшайте свою вычислительную нагрузку, пока не прекратите получать их. Если у вас все еще есть проблемы, опубликуйте свой код или, по крайней мере, достаточно, чтобы воспроизвести проблему, на github, и я постараюсь взглянуть.
Масштабирование частоты процессора является проблемой для приложений реального времени, которые предъявляют значительные требования к пропускной способности процессора.
Других решений пока нет …