Подтвердить что ты не робот

Когда разумно использовать bindService и когда startService

Это может быть глупый вопрос, но я хотел бы знать, когда разумно использовать bindService и когда использовать startService.

Например:

Если я использую bindService с BIND_AUTO_CREATE, служба будет запущена и создана автоматически, как написано здесь: http://developer.android.com/reference/android/content/Context.html#BIND_AUTO_CREATE

Когда он умный, то использовать bindService и когда startService? Я действительно не понимаю этих двух правильно.

4b9b3361

Ответ 1

Обычно вы используете bindService(), если ваш вызывающий компонент (Activity) должен связаться с Service, который вы запускаете, через ServiceConnection. Если вы не хотите общаться с Service, вы можете использовать только startService(). Вы можете видеть ниже разницу между сервисом и службой связывания.

Из документов:

Начало

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

Связано

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

Вы можете прочитать здесь: Android-сервисы, Связанные службы

Ответ 2

Я согласен с @Ovidiu Latcu, но с одним важным примечанием: при использовании связанных сервисов служба заканчивается, когда завершаемая деятельность завершается (если это единственное действие, связанное с этой службой).

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