Я разрабатываю приложение, которое связывается со встроенным устройством через BLE (Bluetooth Low Energy). Приложение позволяет пользователю отправлять команды через деятельность. Между тем приложение должно отправлять данные о местоположении в фоновом режиме. Данные о местоположении должны отправляться постоянно, даже если действие закрыто и открыто несколько раз в течение дня.
Я не могу отделить продолжающиеся обновления местоположения от командных запросов. Поскольку все передачи BLE должны быть синхронизированы одной очередью, чтобы предотвратить одновременные передачи, которые могут привести к потере пакета.
После прочтения официального руководства (https://developer.android.com/guide/components/services#Basics), моей первой идеей было использование службы переднего плана, потому что служба не должна прерываться при закрытии действия. Это прекрасно работает для отправки данных о местоположении. Однако для отправки Команды, которые я должен связать со службой после ее запуска. Я прочитал, что не рекомендуется использовать оба параметра startService()
и bindService()
, но вместо этого принять решение об одном способе. Насколько я понял, связанная служба может быть уничтожена когда ссылочный контекст (активность в моем случае) разрушен, поэтому я думаю, что привязка к сервису не вариант для меня.
Другой подход к общению с запущенной службой - отправка команд с помощью широковещательных рассылок и их получение в службе ( отправка команд из Activity в Service в android ).
Но я думаю, что должно быть лучшее решение, которое я скучаю. Мне пришло в голову просто звонить startService()
каждый раз, когда я хочу отправить команду Bluetooth. Я думаю, это будет работать. Но разве это хорошая практика? По сути, я бы звонил startService()
десятки раз во время типичного случая использования, прежде чем звонить stopService()
.
.