2012-12-09 15 views
30

To może być głupie pytanie, ale chciałbym wiedzieć, kiedy mądrze jest używać bindService i kiedy używać startService.kiedy jest inteligentny w użyciu bindService i kiedy startService

Na przykład:

Jeśli używam bindService z BIND_AUTO_CREATE, usługa zostanie uruchomiona i automatycznie tworzone jako jest napisane: http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

Kiedy jest mądry następnie użyć bindService i kiedy startService? Naprawdę nie rozumiem tych dwóch poprawnie.

+0

Prawdopodobny duplikat [usługa androidowa startService() i bindService()] (http://stackoverflow.com/questions/3514287/android-service-startservice-and-bindservice) –

Odpowiedz

55

Zwykle używać bindService() jeśli składnik wywołujący (Activity) będą musieli komunikować się z Service że jesteś począwszy, poprzez ServiceConnection. Jeśli nie chcesz komunikować się z Service, możesz użyć tylko startService(). Widać poniżej różnice pomiędzy usługą i usługą bindowania.

Od docs:

Rozpoczęte

usługa jest "zaczęło", kiedy komponent aplikacji (takich jak działalność) rozpoczyna go poprzez wywołanie StartService(). Po uruchomieniu usługa może działać w tle przez czas nieokreślony, nawet jeśli komponent, który ją uruchomił, zostanie zniszczony. Zwykle uruchomiona usługa wykonuje pojedynczą operację, a nie zwraca użytkownikowi wywołania wartości. Na przykład może pobrać lub przesłać plik przez sieć. Po zakończeniu operacji usługa powinna się zatrzymać.

Związane

usługa jest „związany”, kiedy komponent aplikacji wiąże się z nim poprzez wywołanie bindService(). Związana usługa oferuje interfejs klient-serwer, który umożliwia komponentom interakcję z usługą, wysyłanie żądań, uzyskiwać wyniki, a nawet robić to w procesach z komunikacją międzyprocesową (IPC). Związana usługa działa tylko tak długo, jak długo inny składnik aplikacji jest z nią związany. Wiele składników może połączyć się z usługą na raz, ale gdy wszystkie z nich się zwiążą, usługa zostanie zniszczona.

można przeczytać więcej tutaj: Android Services, Bound Services

16

zgadzam się z @Ovidiu Latcu ale Jedna ważna uwaga: podczas korzystania z usług związanych, usługa jest zakończony, gdy aktywność że zaczęło się kończyć, (jeśli jest to jedyna czynność związana z tą usługą).

Jeśli chcesz uruchomić usługę w tle, gdy aplikacja jest w tle, (działanie jest na przykład wstrzymane i niewidoczne dla użytkownika), musisz uruchomić usługę bez ograniczania i komunikowania się z nim na przykład z BroadcastReceiver.

+0

fajna informacja –

+0

również możesz uruchomić usługę i związany z tym później - w ten sposób pozostanie uruchomiony, dopóki nie zostanie wywołany stop. – benchuk

+1

Chciałbym rozważyć uzyskanie wyniku (przy użyciu 'BroadcastReceiver' lub jakiejkolwiek innej alternatywy) z usługi, która jest uruchamiana tylko z' startService() 'i nie ma powiązania między nim a klientami jako ** zła praktyka ** ponieważ, jako Ovidiu Latcu, ** usługa ** uruchomiona ** zwykle nie zwraca wyniku_ do rozmówcy (klientów), w przeciwieństwie do ** usługi ** związanej, która oferuje interfejs klient-serwer, który pozwala komponentom na interakcję z usługą, wysyłanie Żądania, _poznane wyniki _.... – Eido95

Powiązane problemy