Buduję aplikację, która przesyła muzykę z serwera WWW. Aplikacja ma usługę pierwszoplanową, która korzysta z MediaPlayer do odtwarzania.Czy MediaPlayer powinien działać w osobnym wątku?
Mój kod jest oparty na tym przykładzie: http://developer.android.com/guide/topics/media/mediaplayer.html
W przykładzie, nic nie jest gwintowany z wyjątkiem prepareAsync() rozmowy. Martwi mnie fakt, że kiedy przeczytałem o klasie Service, znajduję tę informację:
"Uwaga: usługa działa w głównym wątku procesu hostingu - usługa nie tworzy własnego wątku i nie uruchamia się oddzielny proces (chyba że określisz inaczej) .Oznacza to, że jeśli twoja usługa będzie wykonywać intensywne prace lub operacje blokujące procesor (takie jak odtwarzanie MP3 lub praca w sieci), powinieneś utworzyć nowy wątek w usłudze, aby wykonać tę pracę Używając osobnego wątku, zmniejszysz ryzyko błędów ANR (Application Not Responding), a główny wątek aplikacji pozostanie dedykowany interakcji użytkownika z twoimi działaniami. "
Powodem, dla którego pytam, jest to, że aplikacja kilka razy (zazwyczaj po utracie połączenia) blokuje interfejs użytkownika podczas przesyłania strumieniowego audio. Całkowicie rozumiem, że interfejs użytkownika zawiesza się, jeśli usługa powoduje intensywną pracę procesora, ponieważ działanie i usługa działają w tym samym wątku. Ale czy powinienem oczekiwać, że MediaPlayer będzie tak intensywny? To znaczy, czy powinien działać w oddzielnym wątku?
readh ere http://stackoverflow.com/questions/8915618/mediaplayer-in-separate-thread-vs-running-in-service-via-startforegroundground –
Zdecydowanie radzę nie wykonywać żadnych blokujących połączeń z Audiomanager , MediaPlayer, AudioRecord i inne z głównego wątku aplikacji. Jeśli system audio tymczasowo ugrzęźnie - lub całkowicie przestanie odpowiadać - z jakiegoś powodu skończy się ANR w aplikacji i raportem o błędzie, który prawdopodobnie nie będzie przydatny dla nikogo. – Michael
Dzięki za odpowiedź @Michael! Całkowicie się z Tobą zgadzam, że połączenia blokujące powinny być uruchamiane w osobnym wątku. Ale czy powinienem oczekiwać, że odtwarzanie multimediów zostanie zablokowane? Po prostu nie mogę znaleźć sposobu, aby powiedzieć, czy odtwarzacz multimedialny staje się "blokujący" lub co jest przyczyną tego. Dzieje się tak tylko wtedy, gdy przesyłam strumieniowo przez rtsp podczas podróży samochodem lub pociągiem. Być może zmiana wieży komórkowej może być problemem? Obecnie opieram się na MediaPlayer, aby rozwiązać ten problem, który ma większość czasu. – smult