2013-02-26 65 views
0

我正在为某些语音处理制作应用程序。对于语音录音则使用Android AudioRecord类。 AudioRecord实例放入服务中。一个单独的线程用于调用类的方法AudioRecord类(在SO上有足够的例子)。读取的样本被转发到我的本地代码以供进一步处理,并且它们被放入一些队列中。在本地代码中,一个线程正在执行处理。问题是这个线程永远不会获得处理器时间。 在完成我的应用程序时,我调用了一些清理我的本地资源的函数。但它发生的整个清理过程还没有完成(我使用通话建立它)。当我再次启动应用程序时,我的本机处理开始了(阅读新样本尚未开始)。当AudioRecord运行时,本机线程永远不会获得处理器时间

阅读线程是否有可能仅为自己使用处理器?我可以为我的本机(处理器)线程设置更高的优先级吗?或者它可能是一些其他问题。

我甚至尝试过使用AudioRecord.OnRecordPositionUpdateListeneronPeriodicNotification但没有成功。

+0

您是否尝试附加执行处理的本机线程以查看这是否让它调度?你有多少原生线程?你如何附加访问队列的人? – didierc 2013-02-27 00:54:25

+0

我只有这一个本地线程。我没有附加线程访问队列,因为我没有任何信息从Java代码。为什么我应该这样做? – sinisha 2013-02-27 10:26:41

回答

0

我找到了解决方案。这是我移植的库中的一个错误。一个处理块调用sleep方法。这个库首次在windows下使用,睡眠时间以毫秒为单位。这一次移植后是在几秒钟内。所以我的本地线程睡了50秒,而不是50毫秒。