«Если вы запустите службу 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()
. "