2012-12-04 10 views
16

W jakich przypadkach powinienem rozpocząć korzystanie z Usługi i w jakim przypadku usługą wiążącą? Na przykład - klient Android dla usługi muzycznej? Czy istnieją jakiekolwiek różnice w priorytecie Systemu, czy są to wszelkie wspólne zasady; coś jeszcze?Usługa Android: wiązanie lub uruchamianie?

Odpowiedz

18

Zastosowanie startService() za usługi, które będą działać niezależnie od ich rozpoczęcia. Odtwarzacze muzyki są dobrym przykładem. Są one uruchamiane, dopóki nie wywołają stopSelf() lub ktoś zadzwoni pod numer stopService().

można komunikować się z usługą uruchomionego wysyłając intencjami iz powrotem, ale w przeważającej części, wystarczy uruchomić usługę i pozwolić mu działać na własną rękę.

Zastosowanie bind() gdy usługa i klient będzie komunikować iz powrotem na trwałe połączenia. Dobrym przykładem jest usługa nawigacji, która będzie przekazywać aktualizacje lokalizacji z powrotem do klienta. Segregatory są o wiele trudniejsze do napisania niż intencje, ale tak naprawdę są one najlepszym sposobem na zastosowanie tego przypadku.

chodzi o priorytet: Kiedy wszystkie działania procesu tracą widoczność, proces staje się procesem serwis jeśli gospodarze usługę który został uruchomiony z onStart(), w przeciwnym razie staje się procesem tło. Procesy obsługi mają wyższy priorytet niż procesy działające w tle. Więcej informacji pod adresem android developer site.

Jeśli proces serwisowy bez widocznej aktywności wymaga wyższego priorytetu (np. Odtwarzacza muzyki, który tak naprawdę nie powinien być przerywany), usługa może zadzwonić pod numer startForeground().

+2

Tutorial programista Google wspomina, że ​​wiązanie '„... będzie działać dobrze dla aplikacji muzycznej, która musi wiązać działalność na własny serwis, który jest odtwarzanie muzyki w tle.”' A jednak można powiedzieć, że to co StartService powinny być używany do. Komentuję, ponieważ w tej chwili zmagam się z tym samym pytaniem: związać się lub zacząć. –

+0

Samouczki dla programistów Google są okropne i nieudane. –

+0

Naprawdę, tak czy inaczej działa. StartService() jest zwykle najlepszym wyborem dla usługi, która będzie działać na własną rękę, a bind() jest zwykle najlepszym wyborem, gdy aplikacja i usługa będzie w stałym kontakcie z powrotem-i-dalej. Ale możesz użyć funkcji Intent do komunikacji w przód iw tył z usługą stylu startService() lub możesz użyć funkcji bind() do uruchomienia usługi i po prostu pozwól jej działać. Rób, jak chcesz. Szczerze mówiąc, segregatory to dużo pracy do napisania, więc ich unikam. Możesz także użyć ResultReceiver, który jest wygodnym opakowaniem wokół Binder. –

Powiązane problemy