„Jeśli uruchomisz usługę systemu Android z startService(..)
tą usługą, pozostanie ona uruchomiona do momentu jawnego wywołania stopService(..)
. Istnieją dwa powody, dla których usługa może być uruchomiona przez system. Jeśli ktoś zadzwoni, Context.startService()
system pobierze usługę (utworzy ją i wywoła onCreate()
metodę, jeśli potrzebne), a następnie wywołaj swoją onStartCommand(Intent, int, int)
metodę z argumentami dostarczonymi przez klienta. Usługa będzie w tym momencie działać do momentu wywołania Context.stopService()
lub jej stopSelf()
wywołania. Należy pamiętać, że wielokrotne wywołania Context.startService()
nie zagnieżdżają się (chociaż skutkują wieloma odpowiadającymi im wywołaniami onStartCommand()
), więc nie bez względu na to, ile razy jest uruchamiana, usługa zostanie zatrzymana raz Context.stopService()
lub stopSelf()
zostanie wywołana; jednak usługi mogą używać ichstopSelf(int)
metoda, aby upewnić się, że usługa nie zostanie zatrzymana, dopóki nie zostaną przetworzone rozpoczęte intencje.
Klienci mogą również używać Context.bindService()
do uzyskiwania trwałego połączenia z usługą. Powoduje to również utworzenie usługi, jeśli jeszcze nie jest uruchomiona (wywołuje onCreate()
podczas wykonywania tej czynności), ale nie wywołuje onStartCommand()
. Klient otrzyma IBinder
obiekt, który usługa zwraca ze swojej onBind(Intent)
metody, umożliwiając klientowi następnie wywołanie z powrotem do usługi. Usługa będzie działać tak długo, jak długo zostanie nawiązane połączenie (niezależnie od tego, czy klient zachowuje odniesienie do Usługi IBinder
). Zwykle IBinder
zwracany jest dla złożonego interfejsu, który został napisany w AIDL.
Usługę można zarówno uruchomić, jak i powiązać z nią połączenia. W takim przypadku system będzie utrzymywał usługę tak długo, jak długo jest uruchomiona lub istnieje co najmniej jedno połączenie z nią oznaczone Context.BIND_AUTO_CREATE
flagą. Gdy żadna z tych sytuacji nie jest spełniona, onDestroy()
wywoływana jest metoda Usługi, a usługa zostaje skutecznie zakończona. Całe czyszczenie (zatrzymywanie wątków, wyrejestrowywanie odbiorców) powinno być zakończone po powrocie z onDestroy()
. ”