То, что вы испытываете, вероятно, будет масштабатором частоты процессора на Galaxy S9, который агрессивно уменьшает частоту процессора, когда к экрану не прикасаются.Это приводит к недостаточной вычислительной полосе пропускания, в результате чего ваше приложение занимает слишком много времени внутри звукового обратного вызова, что приводит к недоработке / сбоям.
Для проверки используйте systrace и профилировщик Android Studio .Systrace покажет вам как недогрузки, так и частоту процессора.
Нажмите на экран во время трассировки, и вы увидите увеличение частоты ЦП, а затем вскоре падение.
В этом случае вы можете попробовать несколько вещей:
- Убедитесь, что вы используете наиболее оптимальные флаги компилятора
-Ofast
или -O3
- Используйте недавно выпущенный
StabilizedCallback
класс в Oboe, который был разработан именно для этой цели - он будет пытаться поддерживать вращение процессора, чтобы избежать его уменьшения. - Контролируйте опустошения (доступны через
AudioStream::getUnderruns()
) и уменьшайте свою вычислительную нагрузку, пока не прекратите получать их.
Если у вас по-прежнему возникают проблемы, опубликуйте свой код или хотя бы его достаточно, чтобы воспроизвести проблему, на github, и я постараюсь взглянуть.
Масштабирование частоты процессора является проблемой для приложений реального времени, которые предъявляют значительные требования к пропускной способности процессора.