Может ли кто-нибудь объяснить, в чем разница между несвязанным и связанным сервисом в android

может ли кто-нибудь объяснить, в чем разница между несвязанным и связанным сервисом в android и объяснить о intent service

спасибо

4 ответов


Привязанные Услуги

служба привязывается, когда компонент приложения привязывается к ней с помощью звоню bindService(). Связанная служба предлагает клиент-сервер интерфейс, позволяющий компонентам взаимодействовать с сервисом, отправлять запросы, получать результаты и даже делать это через процессы с межпроцессного взаимодействия (IPC).

когда последний клиент отцепляется от службы, система уничтожает услуга за исключением если служба была запущена startService

Unbound Service или Started

служба запускается, когда компонент приложения, например activity, запускает его, вызывая startService (). После запуска службы может работать в фоновом режиме бесконечно, даже если компонент, который начатое разрушено.

но

большая путаница о классе обслуживания на самом деле вращается вокруг того, что это не так:

служба не является отдельным процессом. Сам объект Service не означает, что он работает в своем собственном процессе; если иное не указанный, он работает в том же процессе, что и приложение, которое является частью из.

сервис не поток. Это не средство само по себе, чтобы сделать работу основной поток (чтобы избежать ошибок, не отвечающих приложению).

Это где IntentService есть.

IntentService подкласс сервис, который использует рабочий поток для

обрабатывать все асинхронные запросы запуска (выраженные как намерения) на требуйте по одному. Клиенты отправляют запросы через вызовы startService(Intent); служба запускается по мере необходимости, обрабатывает каждое намерение по очереди использует рабочий поток и останавливается, когда он заканчивается работа.

Example

надеюсь, что это помогает :)


ограниченные службы ограничены деятельностью, которая связывает его и будет работать только до тех пор, пока ограниченная деятельность жива. в то время как неограниченная служба будет работать до завершения даже после того, как деятельность будет уничтожена. табличная разница приведена ниже ссылки, которая очень полезна для интервью http://infobloggall.com/2014/04/15/bounded-service-in-android/


  1. несвязанная служба запускается, когда компонент (например, activity) вызывает метод startService() Где как служба привязана, когда другой компонент (например, клиент) вызывает метод bindService ().

  2. несвязанная служба может остановить себя, вызвав метод stopSelf (). Где как связанная служба не может быть остановлена, пока все клиенты не разблокируют службу.

  3. несвязанная служба работает в фоновом режиме бесконечно. Где Как Связанная служба не работает в фоновом режиме бесконечно.

  4. несвязанная служба остановлена методом stopService (). Где, как и в связанной службе, клиент может отменить привязку службы, вызвав метод unbindService ().

спасибо


связанные и несвязанные услуги не являются двумя сторонами монеты

служба может быть связанной или несвязанной(запущенной) или обеими, это просто вопрос реализации, которую вы предоставляете методам обратного вызова класса Service. См. все четыре метода обратного вызова здесь

но ради дифференциации держи

1. Глядя на службу

Unbound Service запускается по телефону startService() метод.
Связанная Служба запускается вызовом bindService() метод.
Однако в обоих вызовах system calls onStartCommand() метод внутренне

2. Срок службы

как только unboundService запускается, он запускается бесконечно, пока

BoundService работает пока служба привязана к клиенту. При отсутствии активного клиента, связанного со службой, система уничтожает службу

3. onBind() метод

когда вы пишете службу, вам придется переопределить onBind (). Если
Несвязанная служба затем возвращает null
Затем BoundService возвращает объект IBinder.

хотя несвязанные службы не возвращают объект Ibinder, это не означает, что он не может взаимодействовать с приложением деталь. Есть способы сделать это, например приемник BroadcastReceiver или ResultReceiver

один путь против двухстороннего сообщения с обслуживанием

если вы хотите двустороннюю связь с вашей службой, то вы должны связать свою службу с деятельностью.
Например. Воспроизведение музыки в фоновом режиме с паузой, опция воспроизведения (Activtiy Service).

пойдите с unbound или начатым обслуживанием когда вы как раз хотите ваше Сервис для обновления вашей деятельности (Service->Activity).
Например: Служба таймера, которая обновляет активность каждую секунду.

другой пример

вы написали некоторую услугу, которая имеет дело с изменениями местоположения.
Если вы хотите обновить свою активность при перемещении на 10 метров (перейдите с несвязанным сервисом).
Если вы хотите увидеть координаты вашего текущего местоположения при нажатии какой-либо кнопки в действии. (Иди со связью. услуга.)