2011-01-28 19 views
9

Mam aplikację, która składa się z usługi i czynności, które mogą zostać uruchomione przez usługę dla określonych zdarzeń. Usługa może utworzyć & przy użyciu klas AudioRecord & AudioTrack - w którym to czasie wyświetlana jest aktywność aplikacji. Problem polega na tym, że działanie jest wstrzymane (tzn. Wywoływana jest funkcja onPause()). Zaczynam otrzymywać błędy przepełnienia bufora RecordThread:?AudioFlinger (59): RecordThread: przepełnienie bufora, gdy działanie jest wstrzymane?

Zgaduję, że AudioRecorder działa w głównym wątku. I mimo że został stworzony przez usługę, kiedy Aktywność wstrzyma czytanie zatrzymuje się więc przepełnienie bufora? Czy odczyt AudioRecorder musi być wykonany w osobnym wątku, mimo że działa on w usłudze?

Każda pomoc będzie bardzo ceniona, dzięki.

Odpowiedz

8

Przepełnienie bufora RecordThread ma miejsce, gdy nie pobierasz wystarczająco szybko danych z obiektu AudioRecord.

powinno się mieć pętlę, która pobiera dane z obiektu AudioRecord w sperate wątku i należy zatrzymać ten wątek, jeśli działalność zostanie wstrzymana (chyba, że ​​chcesz nagrać w tle).

Oto kilka przykładów wdrożeń roboczych:

+0

Dziękujemy! Tak, chcę nagrywać w tle – dchappelle

1

Chociaż stare pytanie, chciałbym znać tę odpowiedź, gdy zaczynam pracować z usługami, więc będę ją rejestrować do przyszłych referencji przez innych:

Często pomijanym, ale BARDZO ważnym punktem dotyczącym Usług jest fakt, że nie automatycznie spawnuje własne wątki, ale działa na głównym wątku GUI. Jest to bardzo sprzeczne z intuicją, gdy rozważa się słowo "usługa", ale niemniej prawdziwe. (Patrz pierwsza sekcja "Uwaga" pod adresem http://developer.android.com/guide/topics/fundamentals/services.html).

Możesz także rozważyć rozszerzenie klasy IntentService zamiast klasy Service, która "... utworzy [s] domyślny wątek roboczy, który wykonuje wszystkie intencje ... oddzielone od głównego wątku aplikacji." (http://developer.android.com/guide/topics/fundamentals/services.html)

Mam nadzieję, że ktoś uzna to za przydatne!

Powiązane problemy