#android #android-service
#Android #android-сервис
Вопрос:
Чем действие «привязки» onBind()
метода отличается от простого вызова onStartCommand()
?
onStartCommand()
«Система вызывает этот метод, когда другой компонент, такой как activity, запрашивает запуск службы путем вызова startService()
» .
onBind()
Система вызывает этот метод, когда другой компонент хочет связать со службой (например, для выполнения RPC), путем вызова bindService()
.
Я хочу написать службу чат-клиента, которая получает сообщения от нескольких пользователей. Какая функция была бы более подходящей?
Ответ №1:
Первый ( onStartCommand()
) вызывается, когда ваш Service
начинает выполнять свою работу. onCreate()
завершено, и он готов приступить к выполнению того, что нужно сделать.
Второй ( onBind()
) вызывается, когда другой поток регистрируется для подключения к Службе, чтобы они могли обмениваться данными. Вы должны настроить или настроить средства для связи здесь, такие как проверка интерфейса или обратные вызовы для регистрации действия.
Привязка позволяет привязать службу к продолжительности жизни, например, действия. Если действие завершается, службе разрешается быть выпущенной и она может сама завершиться. Служба будет работать до тех пор, пока к ней все еще что-то привязано.
Ответ №2:
onStartCommand() и onBind() являются методами обратного вызова класса Service.
onStartCommand()
вызывается после onCreate()
метода класса обслуживания в первый раз.В следующий раз, когда любой другой компонент Android запустит ту же службу, служба получит новый запрос в onStartCommand()
методе.
onBind()
вызывается, когда другие компоненты Android пытаются подключиться к уже запущенной службе с помощью bindService()
метода.Он используется для передачи какой-либо новой информации в службу или попытки установить служебное соединение.
Ответ №3:
Связанная служба завершится, когда к ней больше не будут привязаны действия. Привязка также позволяет отправлять ему дополнительные команды через такие интерфейсы, как AIDL
. В вашем случае, я думаю, вам нужна связанная служба, поскольку вы, вероятно, не хотите, чтобы служба пережила действие.
Ответ №4:
Фактически, если компонент вызывает bindService()
для создания службы и onStartCommand()
не вызывается, служба выполняется только до тех пор, пока компонент привязан к ней. После того, как служба не привязана ко всем своим клиентам, система уничтожает ее. Итак, onBind()
если действие уничтожит вашу службу, оно не сработает.
Ответ №5:
Согласно официальной документации, при запуске службы с помощью bindService()
если компонент (т.Е. Activity) вызывает bindService() для создания службы, а onStartCommand() не вызывается, служба выполняется только до тех пор, пока к ней привязан компонент. После того, как служба не привязана ко всем своим клиентам, система уничтожает ее.
и когда служба запускается с помощью startService()
Если компонент запускает службу, вызывая startService() (что приводит к вызову onStartCommand()) , служба продолжает работать до тех пор, пока не остановится с помощью stopSelf() или другой компонент не остановит его, вызвав stopService() .