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

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

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

任何帮助将不胜感激,谢谢。

Solutions Collecting From Web of "AudioFlinger(59):RecordThread:Activity暂停时缓冲区溢出?"

当你不从AudioRecord对象拉取数据时,RecordThread缓冲区溢出发生。

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

这里有几个工作实现的例子:

  • 和-dev例子
  • StackOverflow示例

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

一个经常被忽视但非常重要的问题是,它们不会自动产生自己的线程,而是在主GUI线程上运行。 当考虑“服务”一词时,这是非常直观的,但是却是事实。 (请参阅http://developer.android.com/guide/topics/fundamentals/services.html上的第一个“注意”部分)。

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

希望有人认为这有用!