我有一个应用程序,它由一个服务和一个活动组成,可以由该服务为某些事件启动。服务可能会创建并使用AudioRecord和AudioTrack类--此时会显示应用程序的活动。问题是,如果活动暂停(即调用onPause() ),我会开始收到RecordThread: buffer overflow errors?
我猜AudioRecorder是在主线程中运行的。而且,即使它是由服务创建的,当活动暂停时,读取停止会导致缓冲区溢出吗?AudioRecorder读取是否必须在单独的线程中完成,即使它在服务中运行?
任何帮助都将非常感谢,谢谢。
发布于 2011-02-04 00:57:46
当您没有足够快地从AudioRecord对象中提取数据时,就会发生RecordThread缓冲区溢出。
您绝对应该有一个循环,它在一个高级线程中从AudioRecord对象中提取数据,如果您的活动暂停了,您应该停止这个线程(除非您想在后台记录)。
下面是几个工作实现的示例:
发布于 2012-01-11 17:41:03
虽然这是一个古老的问题,但我希望在开始使用服务时知道这个答案,所以我将它记录下来,供其他人将来参考:
关于服务,经常被忽视但非常重要的一点是,它们不会自动产生自己的线程,而是在主GUI线程上运行。当考虑到“服务”这个词时,这是非常违反直觉的,但仍然是正确的。(请参阅http://developer.android.com/guide/topics/fundamentals/services.html上的第一个“注意”部分)。
您可能还想考虑扩展IntentService类而不是Service类,后者将"...creates一个执行所有意图的默认工作线程……独立于应用程序的主线程“。(http://developer.android.com/guide/topics/fundamentals/services.html)
希望有人觉得这篇文章有用!
https://stackoverflow.com/questions/4829102
复制相似问题