2011-01-28 14 views
9

Tengo una aplicación que consiste en un servicio y una actividad que el servicio puede iniciar para ciertos eventos. El servicio puede crear & utilizar las clases AudioTracord & AudioTrack, momento en el que se muestra la Actividad de la aplicación. El problema es si la Actividad está en pausa (es decir, se llama a OnPause()) Empiezo a obtener RecordThread: ¿errores de desbordamiento del búfer?AudioFlinger (59): RecordThread: desbordamiento de búfer cuando la actividad está en pausa?

Supongo que el AudioRecorder se está ejecutando en el hilo principal. Y, a pesar de que fue creado por el servicio, cuando la Actividad pausa la lectura se detiene, entonces el búfer se desborda? ¿La lectura de la AudioRecorder debe realizarse en un hilo separado aunque se esté ejecutando en el servicio?

Cualquier ayuda sería muy apreciada, gracias.

Respuesta

8

Los desbordamientos de búfer RecordThread se producen cuando no se extraen los datos del objeto AudioRecord lo suficientemente rápido.

Definitivamente, usted debe tener el bucle que extrae datos de objeto AudioRecord en un hilo sperate, y usted debe dejar que el hilo si su actividad se detuvo (a menos que desee grabar en el fondo.)

Aquí están un par de ejemplos de implementaciones de trabajo:

+0

¡Gracias! Sí, quiero grabar en segundo plano – dchappelle

1

Aunque es una vieja pregunta, me gustaría saber esta respuesta cuando empiece a trabajar con Servicios, así que la registraré para referencia futura por otros:

Un punto a menudo pasado por alto pero MUY importante con respecto a los Servicios es el hecho de que no generan automáticamente sus propios hilos, pero se ejecuta en el hilo principal de la GUI. Esto es muy contrario a la intuición cuando se considera la palabra "servicio", pero no obstante es cierto. (Consulte la primera sección de 'Precaución' en http://developer.android.com/guide/topics/fundamentals/services.html).

También puede considerar extender la clase IntentService en lugar de la clase de servicio que "... creará [s] un subproceso de trabajo predeterminado que ejecuta todos los intentos ... se separa del subproceso principal de la aplicación". (http://developer.android.com/guide/topics/fundamentals/services.html)

¡Espero que alguien encuentre esto útil!

Cuestiones relacionadas