AudioFlinger (59): RecordThread: переполнение буфера при приостановке Activity? - PullRequest
10 голосов
/ 28 января 2011

У меня есть приложение, которое состоит из службы и действия, которое может запускаться службой для определенных событий.Служба может создавать и использовать классы AudioRecord и AudioTrack - в это время отображается активность приложения.Проблема в том, что если действие приостановлено (т. Е. Вызывается onPause ()), я начинаю получать RecordThread: ошибки переполнения буфера?

Я предполагаю, что AudioRecorder работает в главном потоке.И, несмотря на то, что он был создан службой, когда действие приостанавливает чтение, останавливается, таким образом, переполняется буфер?Должно ли чтение AudioRecorder выполняться в отдельном потоке, даже если оно запущено в службе?

Любая помощь будет принята с благодарностью, спасибо.

Ответы [ 2 ]

9 голосов
/ 03 февраля 2011

Переполнение буфера в RecordThread происходит, когда вы недостаточно быстро извлекаете данные из объекта AudioRecord.

У вас определенно должен быть цикл, который извлекает данные из объекта AudioRecord в отдельном потоке, и вы должны остановить этот поток, если ваша активность приостанавливается (если вы не хотите выполнять запись в фоновом режиме).

Вот несколько примеров рабочих реализаций:

1 голос
/ 11 января 2012

Хотя это старый вопрос, я хотел бы знать этот ответ, когда начинаю работать со Службами, поэтому я запишу его для дальнейшего использования другими:

Часто упускаемый из виду, но ОЧЕНЬ важный момент, касающийся Услуг, - это фактчто они не создают свои собственные потоки автоматически, а работают в основном потоке графического интерфейса.Это очень нелогично при рассмотрении слова «сервис», но, тем не менее, верно.(См. Первый раздел «Внимание» в http://developer.android.com/guide/topics/fundamentals/services.html).

. Вы также можете рассмотреть возможность расширения класса IntentService вместо класса Service, который "... создаст [s] рабочий поток по умолчанию, который выполняет всенамерения ... отделены от основного потока вашего приложения. "(http://developer.android.com/guide/topics/fundamentals/services.html)

Надеюсь, кто-то найдет это полезным!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...