2012-04-09 15 views
6

Estoy usando un hilo que graba el audio usando la clase AudioRecord y colocado en el registradorBUffer (que es una lista vinculada de Corto []), un hilo separado que hace la codificación de estos datos y lo coloca en un playerBuffer (lista vinculada [ ]). Para reproducir el audio, estoy usando la clase AudioTrack y en PeriodicNotification(). Leo los datos de playerBuffer y los escribo en la pista.¿Cómo evito que GC_CONCURRENT se ejecute con tanta frecuencia?

El código es simple y directo hacia adelante tal como aparece. Sin embargo, no funciona como debería. GC_CONCURRENT come de todo el tiempo y que está causando el reinicio de AudioTrack con tanta frecuencia (¡supongo!). Consigo siguientes mensajes de LogCat: -

04-09 12:25:13.757: E/Constructor(10100): inside constructor 
04-09 12:25:13.757: I/ApplicationPackageManager(10100): cscCountry is not German : INS 
04-09 12:25:17.429: E/startRecording(10100): start Recording 
04-09 12:25:17.445: I/AudioCapturer(10100): Audio Recorder created 
04-09 12:25:17.546: I/Audio Player(10100): Audio Track instance created buffer Size : 2972 
04-09 12:25:17.546: I/SpeexThread(10100): Thread Started Successfully.. 
04-09 12:25:17.734: D/dalvikvm(10100): GC_CONCURRENT freed 55K, 44% free 3208K/5639K, external 408K/517K, paused 4ms+6ms 
04-09 12:25:17.945: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 39% free 3765K/6151K, external 408K/517K, paused 3ms+8ms 
04-09 12:25:18.148: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 36% free 4277K/6663K, external 408K/517K, paused 3ms+8ms 
04-09 12:25:18.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 33% free 4981K/7367K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:18.734: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 29% free 5877K/8263K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:18.828: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:19.164: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 26% free 7093K/9479K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:19.710: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 22% free 8693K/11079K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:19.984: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:20.414: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 19% free 10741K/13127K, external 408K/517K, paused 3ms+9ms 
04-09 12:25:21.156: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:21.171: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 16% free 12789K/15175K, external 408K/517K, paused 3ms+11ms 
04-09 12:25:21.976: D/dalvikvm(10100): GC_CONCURRENT freed <1K, 14% free 14837K/17223K, external 408K/517K, paused 3ms+9ms 
// same messages errors continue 
04-09 12:25:28.117: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:29.242: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 29172K/31559K, external 408K/517K, paused 3ms+11ms 
04-09 12:25:29.273: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:30.445: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:30.507: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 8% free 31220K/33607K, external 408K/517K, paused 4ms+12ms 
04-09 12:25:31.601: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:31.820: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 33268K/35655K, external 408K/517K, paused 3ms+12ms 
04-09 12:25:32.757: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:33.187: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 35316K/37703K, external 408K/517K, paused 3ms+13ms 
04-09 12:25:33.929: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:34.593: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 7% free 37364K/39751K, external 408K/517K, paused 4ms+11ms 
04-09 12:25:35.085: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:36.039: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 39412K/41799K, external 408K/517K, paused 3ms+12ms 
04-09 12:25:36.242: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:37.406: W/AudioTrack(10100): obtainBuffer() track 0x1d0478 disabled, restarting 
04-09 12:25:37.617: D/dalvikvm(10100): GC_CONCURRENT freed 1K, 6% free 41460K/43847K, external 408K/517K, paused 5ms+13ms 
04-09 12:25:38.640: D/dalvikvm(10100): GC_FOR_MALLOC freed 1K, 6% free 43507K/45895K, external 408K/517K, paused 933ms 
04-09 12:25:38.656: I/SpeexThread(10100): exitting Thread 
04-09 12:25:38.656: E/stopRecording(10100): stop Recording 

El AudiTrack se reinicia cada pocos milisegundos, y la recolección de basura se llama de manera casi continua. ¿Cómo puedo minimizar las llamadas de colimación de GArbage y cuál es la razón detrás del reinicio de AudioTrack? Plz ayuda ...

+8

Estimado downvoter, si su es cierto problema por favor comentar de modo que pueda mejorar la cuestión y aprender ... Gracias !!! – aProgrammer

+3

Sé agradecido de que tengas un colector de basura, no quieres detenerlo, está limpiando porque hay un problema con tu implementación, necesitarías publicar algo de tu código usando AudioTrack para obtener más ayuda. (No soy deshonesto) – Rob

+0

@Rob, gracias ... Todavía estoy trabajando en el mismo problema ... Pronto voy a publicar mi progreso ... – aProgrammer

Respuesta

11

Una solución temporaral del problema fue aumentando el uso de TamañoPila dalvik.system.VMRuntime.getRuntime().setMinimumHeapSize(32 * 1024 * 1024); Sin embargo este enfoque es no se recomienda y debe ser evitado .

Mediante la depuración exhaustiva encontré que el problema real se debía a interfaces superpuestas y algunas funciones con fugas. Más tarde me quité uno de la interfaz, rediseñado la solución global y re-factorizado el código y que resuelto mi problema.

favor comparta si tiene alguna otra solución,

+0

Excelente, gracias por compartiendo. – Rob

+1

Tengo el mismo problema, ¿pueden publicar alguna muestra de sus soluciones? Sé que pueden ser específicos, pero pueden ser útiles. Gracias – Onheiron

+1

Acabo de agregar la línea anterior dentro de onCreate() para aumentar el tamaño de la memoria ... Funcionó, sin embargo más tarde necesita refactorizar el código para optimizar el uso de la memoria ... – aProgrammer

Cuestiones relacionadas