2013-02-26 4 views
0

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

Возможно ли, что чтение потока использует процессор только для себя? Могу ли я установить более высокий приоритет для моего собственного (процессорного) потока. Или это может быть какая-то другая проблема.

Я даже пробовал использовать AudioRecord.OnRecordPositionUpdateListener и onPeriodicNotification, но безуспешно.

+0

Вы пытались подключить собственный поток, выполняющий обработку, чтобы проверить, не позволяет ли это запланировать? Сколько собственных потоков вы работаете? Как вы присоединяете к себе доступ к очереди? – didierc

+0

У меня есть только один родной поток. Я не прикрепляю поток, обращающийся к очереди, так как у меня нет никакой информации из java-кода. Почему я должен это делать? – sinisha

ответ

0

Я нашел решение. Это была ошибка в моей портированной библиотеке. Один из блоков обработки вызывает метод sleep. Эта библиотека была впервые использована под окнами, а время сна было в миллисекундах. После переноса это время находится в секундах. Так что мой родной поток спал в течение 50 секунд вместо 50 миллисекунд.