Я делаю приложение для некоторой обработки речи. Для записи речи используется Android AudioRecord
класс. Экземпляр AudioRecord
помещается в службу. Отдельный поток используется для вызова метода read()
класса AudioRecord
(на SO достаточно примеров). Считываемые образцы пересылаются в мой собственный код для дальнейшей обработки, и они помещаются в некоторую очередь. В собственном коде выполняется один поток. Проблема в том, что этот поток никогда не получает процессорного времени. При завершении моего приложения я вызываю некоторые функции для очистки моих собственных ресурсов. Но бывает, что весь процесс очистки не завершен (я установил его с помощью вызовов). Когда я снова запускаю приложение, запускается моя собственная обработка (чтение новых образцов еще не начато).Собственная нить никогда не получает процессорного времени, когда выполняется AudioRecord
Возможно ли, что чтение потока использует процессор только для себя? Могу ли я установить более высокий приоритет для моего собственного (процессорного) потока. Или это может быть какая-то другая проблема.
Я даже пробовал использовать AudioRecord.OnRecordPositionUpdateListener
и onPeriodicNotification
, но безуспешно.
Вы пытались подключить собственный поток, выполняющий обработку, чтобы проверить, не позволяет ли это запланировать? Сколько собственных потоков вы работаете? Как вы присоединяете к себе доступ к очереди? – didierc
У меня есть только один родной поток. Я не прикрепляю поток, обращающийся к очереди, так как у меня нет никакой информации из java-кода. Почему я должен это делать? – sinisha