"Якщо ви запустите службу android з startService(..)
цією службою, вона буде працювати, поки ви явно не запустите її stopService(..)
. Є дві причини, через яку система може запускати службу. Якщо хтось зателефонує, Context.startService()
система отримає службу (створивши її та викликаючи її onCreate()
метод, якщо потрібно), а потім викликати його onStartCommand(Intent, int, int)
метод з аргументами, наданими клієнтом. На цьому етапі служба буде продовжувати працювати до Context.stopService()
або не stopSelf()
буде викликана. Зверніть увагу, що кілька викликів, Context.startService()
які не слід вкладати (хоча вони призводять до декількох відповідних викликів до onStartCommand()
), тому ні незалежно від того, скільки разів він запускався, послуга буде зупинена один раз Context.stopService()
або stopSelf()
викликана; однак служби можуть використовувати їхstopSelf(int)
метод, щоб гарантувати, що служба не зупиняється, доки оброблені наміри не будуть оброблені.
Клієнти також можуть використовувати Context.bindService()
постійне з'єднання з послугою. Це також створює службу, якщо вона ще не запущена (дзвонить onCreate()
при цьому), але не викликає onStartCommand()
. Клієнт отримає IBinder
об'єкт, який служба повертає від свого onBind(Intent)
методу, що дозволяє клієнтові здійснювати зворотні дзвінки до служби. Послуга буде продовжувати працювати доти, доки встановлено підключення (незалежно від того, чи зберігає клієнт посилання на Службу IBinder
). Зазвичай IBinder
повертається для складного інтерфейсу, який був написаний в AIDL.
Послугу можна як запустити, так і мати підключення до неї. У такому випадку система буде підтримувати роботу служби до тих пір, поки вона буде запущена або до неї є одне або кілька з'єднань із Context.BIND_AUTO_CREATE
прапором. Як тільки жодна з цих ситуацій не виконується, onDestroy()
викликається метод Служби, і послуга фактично припиняється. Усі очищення (зупинка потоків, скасування реєстрації приймачів) повинні бути завершені після повернення з onDestroy()
".