У меня есть служба, которая запускается. Кроме того, другие компоненты могут привязываться к службе. Когда компонент связывается с сервисом, он имеет новые параметры, необходимые для доставки в службу. Можно ли принудительно называть onBind каждый раз, когда вызывающему нужно связать (чтобы доставлять новые данные с помощью намерения)? И если да, то дополнительные накладные расходы на вызов onBind каждый раз значительны? Кстати, это местная служба, где я расширяю Binder вместо использования Messenger.Отправка данных в связанную службу
ответ
несколько моментов, чтобы рассмотреть следующие вопросы:
1) onBind() вызывается только для первого обязательного запроса. Все последующие вызовы не приводят к вызову onBind. Вот выдержка из документа Google по этому вопросу:
Несколько клиентов могут подключиться к службе сразу. Тем не менее, система вызывает метод onBind() вашей службы для извлечения IBinder только тогда, когда первый клиент связывается. Затем система передает тот же IBinder всем дополнительным клиентам, которые связывают, не вызывая onBind() снова.
Поэтому вы не должны ожидать, чтобы onBind вызывался каждый раз, когда вызывающий посылает запрос на связывание.
2) Используя экземпляр, возвращенный из onBind(), вызывающие пользователи могут получить доступ к общедоступным методам службы. У вас может быть один общедоступный метод, который будет использоваться для отправки любых параметров. Вот Google doc об этом:
Если ваша служба является частной для вашего собственного приложения и работает в том же процессе, что и клиент (что является общим), вы должны создать свой интерфейс, расширив класс Binder и вернув экземпляр его от onBind(). Клиент получает Binder и может использовать его для прямого доступа к общедоступным методам, доступным либо в реализации Binder, либо даже в службе.
3) Google рекомендует не использовать дополнительные параметры в параметре намерения bindService. Это может быть связано с пунктом 1), упомянутым выше. Вот выдержка из документа Google:
Цель, которая была использована для привязки к этой службе, как указано в Context.bindService. Обратите внимание, что никаких дополнительных функций, которые были включены в намерение в этот момент, здесь не будет видно.
Если нет другой необходимости сделать ее связанной службой, вы можете просто использовать ее в качестве запущенной службы и передать дополнительные параметры в намерении, используемом для запуска службы. Это намерение будет доступно в onStartCommand(). Если услуга привязки необходима по другим причинам, вы можете использовать вариант 2) выше или следовать более сложный подход упоминается здесь:
- 1. Android не убивает связанную службу
- 2. Android - отправка данных в веб-службу
- 3. Отправка данных из активности в службу ОБНОВЛЕНО
- 4. Отправка данных JSON в службу WCF?
- 5. Не уничтожайте связанную службу по действию destroy
- 6. Отправка команд в службу Windows
- 7. Отправка изображения через веб-службу
- 8. Отправка данных байта в веб-службу в cocos2d iphone
- 9. Отправка файла .txt в веб-службу
- 10. Отправка «большой» коллекции данных в службу Azure WCF
- 11. Отправка учетных данных входа от клиента в службу OData
- 12. Отправка данных формы в веб-службу + запрос на вызов
- 13. Отправка и получение данных через веб-службу SOAP в .Net
- 14. Отправка> 48k в службу данных WCF (OData) Ошибка 413
- 15. ASP.NET отправка данных в службу платежей с помощью HttpHandler
- 16. Отправка данных в службу ASP.NET WEB API из Node.js
- 17. Отправка данных из формы drupal в веб-службу Клиент (REST)
- 18. C# Winform: отправка данных из sql в веб-службу
- 19. отправка большого набора данных в службу WCF дает исключение протокола
- 20. Отправка XML на веб-службу
- 21. Безопасная отправка чувствительной информации в службу RESTful
- 22. Отправка java-объекта в веб-службу C#
- 23. Отправка нескольких HTTP-запросов в веб-службу
- 24. Отправка арабского текста в веб-службу
- 25. Отправка байтового массива в службу WCF
- 26. Отправка raw xml в веб-службу
- 27. Отправка BLOB в службу APEX RESTful
- 28. Отправка пользовательского сообщения WCF в службу
- 29. Отправка объекта JSON в службу поддержки WCF
- 30. Python - отправка данных на веб-службу .NET с проверкой подлинности
Если вы связываете к услуге, вы можете просто передать данные в службу через один из его методов ... – tachyonflux