AudioFlinger(59):RecordThread:暂停Activity时缓冲区溢出?

时间:2011-01-28 14:08:48

标签: android audio

我有一个应用程序,它包含服务和活动,可以由服务为某些事件启动。该服务可能会创建&使用AudioRecord& AudioTrack类 - 此时显示应用程序的Activity。问题是如果Activity被暂停(即调用onPause())我开始得到RecordThread:缓冲区溢出错误?

我的猜测是AudioRecorder正在主线程中运行。并且,即使它是由服务创建的,当Activity暂停读取停止因此缓冲区溢出? AudioRecorder读取必须在单独的线程中完成,即使它在服务中运行吗?

非常感谢任何帮助,谢谢。

2 个答案:

答案 0 :(得分:9)

当您没有足够快地从AudioRecord对象中提取数据时,会发生RecordThread缓冲区溢出。

你肯定应该有一个循环从sperate线程中的AudioRecord对象中提取数据,如果你的活动被暂停,你应该停止该线程(除非你想在后台记录。)

以下是一些工作实施的例子:

答案 1 :(得分:1)

虽然这是一个老问题,但我希望在开始使用服务时我知道这个答案,所以我会将其记录下来以供其他人参考:

关于服务经常被忽视但非常重要的一点是,它们不会自动生成自己的线程,而是在主GUI线程上运行。在考虑“服务”这个词时,这是非常反直觉的,但仍然是正确的。 (请参阅http://developer.android.com/guide/topics/fundamentals/services.html上的第一个“警告”部分。)

您可能还需要考虑扩展IntentService类而不是Service类,它将“...创建[s]一个执行所有意图的默认工作线程...与应用程序的主线程分开。” (http://developer.android.com/guide/topics/fundamentals/services.html)

希望有人觉得这很有用!