Привязка к сервису в Android - PullRequest
2 голосов
/ 02 июля 2010

Я немного запутался в том, как работает привязка к сервисам. Я понимаю, что использование Context.startService () запускает службу, и bindService не вызывает onStartCommand. Но я понимаю, что если я использую startService, я должен явно остановить службу. Но я хочу, чтобы служба умерла, если с ней больше не связаны какие-либо действия.

Моя проблема заключается в том, что при вызове bindService никогда не вызывается onServiceConnected (), поэтому мой объект привязки службы имеет значение null. Должен ли сервис быть явно запущен для привязки к нему? Если да, то как он знает, что он завершается, когда к нему больше ничего не привязано, и как мне узнать, запущен ли он, чтобы я мог знать, как использовать связанный объект?

Ответы [ 3 ]

3 голосов
/ 02 июля 2010

если вы вызываете bindService с флагом BIND_AUTO_CREATE в качестве флага, система свяжет вашу деятельность со службой, если она существует, в противном случае, если она не существует, система запустит службу для вас, а затем она свяжет вашу активность с оказание услуг. Более того, если вы запустите Сервис таким способом, он останется активным, только если у него все еще есть некоторый связанный контекст.

это от bindService ():

Подключитесь к сервису приложения, создав его при необходимости. Это определяет зависимость между вашим приложением и службой. Данный конн будет получать объект службы при его создании и сообщать, если он умирает и перезапускается. Услуга будет считаться требуемой системой только до тех пор, пока существует вызывающий контекст. Например, если этот контекст является действием, которое остановлено, от службы не требуется продолжать работу до тех пор, пока действие не будет возобновлено

и это от ServiceLyfecycle

Служба может быть запущена и иметь связанные с ней подключения. В таком случае система будет поддерживать работу службы до тех пор, пока она либо запущена, либо имеется одно или несколько подключений к ней с флагом Context.BIND_AUTO_CREATE. Если ни одна из этих ситуаций не выполняется, вызывается метод onDestroy () службы, и служба эффективно завершается. Вся очистка (остановка потоков, отмена регистрации получателей) должна быть завершена после возврата из onDestroy ().

1 голос
/ 21 августа 2010

Ответ заключается в том, что я не ожидал, что служба действительно будет связана, прежде чем использовать ее, поскольку она привязывается асинхронно

0 голосов
/ 02 июля 2010

Вы должны настраивать связыватель в onBind и любые общие настройки в onCreate. Поведение запуска и привязки сервисов объяснено на http://developer.android.com/reference/android/app/Service.html#ServiceLifecycle

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...