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