6

Czy jest uzasadnione użycie odtwarzacza IntentService dla odtwarzania w tle MediaPlayer na żądanie? Zgodnie z developer's guideIntentService trwa tylko tak długo, jak to faktycznie działa. Biorąc pod uwagę wynikającą napowietrznej reinicjalizacji się MediaPlayer za każdym razem, gdy chcę ponownie odtworzyć utwór, wydaje się być złym pomysłem ...używanie IntentService do odtwarzania MediaPlayer

Więc moje pytanie brzmi: Jak duży jest faktyczny wynikający napowietrznych przy użyciu tego rodzaju Service. Czy miałoby to odczuwalny wpływ na wydajność systemu/aplikacji? Czy zamiast tego powinienem użyć własnej implementacji Service z dedykowanym wątkiem roboczym?

Odpowiedz

11

Czy korzystanie z usługi IntentService w tle Odtwarzanie multimediów na żądanie jest uzasadnione?

IMHO, nie, ponieważ tak naprawdę nie można zmienić utworów. Co więcej, musisz wiedzieć, kiedy ścieżka się zakończy, a nie możesz tego zrobić w ten sposób, z wyjątkiem wycieku pamięci. W końcu oznacza to, że Android zakończy Twój proces, prawdopodobnie milisekund po końcu onHandleIntent(), co oznacza bezużyteczny odtwarzacz muzyki.

Czy zamiast tego powinienem użyć własnej implementacji Usługi z dedykowanym wątkiem roboczym?

Możesz nie potrzebować nicka, ponieważ MediaPlayer jest już asynchroniczny. Tylko jeśli robisz sieciowe operacje we/wy lub dysk we/wy lub coś na własną rękę, możesz chcieć własnego wątku. Ale mając Service - i prawdopodobnie na pierwszym planie Service - jest typowym podejściem dla odtwarzacza muzyki.

+1

Zgodnie z tym: [artykuł] (http://developer.android.com/reference/android/media/MediaPlayer.html) 'start()' nie jest asynchroniczny. Czy to nie blokuje wątku dzwoniącego? – wodzu

+1

@ Paweł: Schemat jest niepoprawny. Funkcja 'start()' jest asynchroniczna. – CommonsWare

+0

@CommonsOdpowiedz, co jeśli moja usługa jest odtwarzana, w międzyczasie usługa jest wywoływana, raz za razem, co oznacza, że ​​czasami potrzebuję grać jeden, a czasami wiele dźwięków jeden po drugim, a co sugerujesz? Nie potrzebuję kontroli nad odtwarzaczem multimedialnym, więc nie muszę wstrzymywać ani szukać. Który może obsłużyć OnHandleIntent. Ale w służbie muszę obsługiwać te zamiary ręcznie przy użyciu onStartCommand. –

Powiązane problemy