Przesyłam muzykę w oddzielnym wątku. Jeśli opuszczę aplikację (onPause()
, onStop()
dzwonienie, itp.), Muzyka będzie nadal odtwarzana, ale ostatecznie - po otwarciu innych aplikacji i przełączeniu się między nimi i powrocie na ekran główny - moja aplikacja zostanie zabita. Bez awarii, tylko WIN DEATH
i process com.myapp.android has died
w logcat. Oczywiście, aby system mógł odzyskać zasoby, jego system może zniszczyć aplikacje.MediaPlayer w oddzielnym wątku vs uruchomiony w usłudze via startForeground()
Moje pytanie brzmi: czy uruchamianie rzeczy w wątku poza głównym wątkiem (UI) oznacza, że ma teraz mniejszy priorytet w odniesieniu do systemu? Czy oznacza to, że jest bardziej prawdopodobne, że zostanie zabity, niż gdybym uruchomił odtwarzacz multimedialny w trybie Service
, a nawet skorzystał z usługi startForeground()
, aby usługa działała na pierwszym planie?
Wszelkie przemyślenia lub wyjaśnienia byłyby mile widziane!
EDIT
Również część dokumentacji o usługach myli mnie. W stosownej części, stwierdza:
Uwaga: Usługa działa w głównym wątku jej hosting procesowej-usługi nie tworzy swój własny wątek i nie działa w oddzielnym procesie (o ile nie określono inaczej). Oznacza to, że jeśli Twoja usługa będzie wykonywała intensywnie pracę z CPU lub blokuje operacje (takie jak odtwarzanie MP3 lub praca w sieci), powinieneś utworzyć nowy wątek w ramach usługi, aby wykonać tę pracę.
Zawsze uruchomiłem odtwarzanie MP3 w usłudze w głównym wątku, a interfejs użytkownika pozostał aktywny. Jeśli mam umieścić go w osobnej nici zgodnie z zaleceniami w powyższym cytacie, to nie będę kończył z powrotem tam, gdzie zacząłem, a mianowicie z odtwarzaniem multimediów poza głównym wątkiem, zwiększając tym samym prawdopodobieństwo, że odtwarzanie jest zabijany, gdy inne aplikacje są otwierane itd.?
Dzięki! Czy możesz skierować moją edycję? – LuxuryMode
Umieściłem moją mediaplayer zarówno w usłudze, jak i poza nią, w jej własnym wątku. Android zabije mediaplayer niezależnie od tego, gdzie się znajduje, jeśli potrzebuje więcej zasobów. I nie jest nawet mniej prawdopodobne, że zostanie zabity w ramach usługi, która ma priorytet na pierwszym planie niż w osobnym wątku. Jedynym miejscem, w którym wydaje się, że nigdy nie zostanie zabity, jest działanie, które jest obecnie na pierwszym planie. – AndroidDev