2011-01-28 12 views
9

Ho un'applicazione che consiste in un servizio e un'attività che può essere avviata dal servizio per determinati eventi. Il servizio può creare & utilizzare le classi AudioRecord & AudioTrack - in cui viene visualizzata l'attività dell'applicazione. Il problema è se l'attività viene messa in pausa (ad esempio, onPause() viene chiamato) Ricomincio a registrare RecordThund: errori di buffer overflow?AudioFlinger (59): RecordThread: buffer overflow quando Activity è in pausa?

La mia ipotesi è che AudioRecorder sia in esecuzione nel thread principale. E, anche se è stato creato dal servizio, quando l'attività sospende la lettura si interrompe così il buffer trabocca? La lettura di AudioRecorder deve essere eseguita in un thread separato anche se è in esecuzione nel servizio?

Qualsiasi aiuto sarebbe molto apprezzato, grazie.

risposta

8

I buffer overflow di RecordThread si verificano quando non si estraggono abbastanza velocemente i dati dall'oggetto AudioRecord.

Si dovrebbe avere il ciclo che estrae i dati dall'oggetto AudioRecord in un thread sperate, e si dovrebbe smettere di quel filo, se la vostra attività viene messa in pausa (a meno che non si desidera registrare in background.)

Ecco un paio di esempi di implementazioni di lavoro:

+0

Grazie! Sì, voglio registrare in background – dchappelle

1

Sebbene sia una vecchia domanda, vorrei conoscere questa risposta quando iniziò a lavorare con i Servizi, quindi lo registrerò per futuri riferimenti da parte di altri:

Un punto spesso trascurato ma MOLTO importante per quanto riguarda i Servizi è il fatto che non lo fanno genera automaticamente i propri thread, ma viene eseguito sul thread della GUI principale. Questo è molto contro-intuitivo quando si considera la parola "servizio", ma ciò nonostante è vero. (Vedere la prima sezione "Attenzione" allo http://developer.android.com/guide/topics/fundamentals/services.html).

Si consiglia inoltre di estendere la classe IntentService anziché la classe Service che "... creerà [un] thread di lavoro predefinito che esegue tutti gli intent ... separato dal thread principale dell'applicazione". (http://developer.android.com/guide/topics/fundamentals/services.html)

Spero che qualcuno lo trovi utile!

Problemi correlati