Можно ли реализовать соединение MQTT с WorkManager? - PullRequest
1 голос
/ 07 января 2020

Я занимаюсь разработкой приложения, в котором мы поддерживаем соединение mqtt с сервером для получения заданий с сервера в режиме реального времени. В настоящее время мы используем подход, в котором мы используем службу переднего плана, чтобы поддерживать соединение, даже когда приложение убито. Проблема в том, что длительное обслуживание так быстро разряжает батарею. И еще я не уверен, как это отреагирует на устройствах разных производителей. Например, на устройствах Xiaomi, если параметр автозапуска не включен для приложения, служба не может запускаться на переднем плане, когда приложение уничтожается. Я решил эту проблему, но я не уверен, будет ли она работать на всех других версиях MIUI и других поставщиков. Кроме того, я читал, что новые версии android будут использовать алгоритмы машинного обучения, чтобы перевести приложения, потребляющие заряд батареи, в спящий режим. Поэтому я ищу другое решение, а не сервис переднего плана. Поэтому я спрашиваю, возможно ли реализовать этот сценарий с помощью WorkManager? Это хорошая идея использовать WorkManager вместо службы переднего плана? Есть ли лучшее решение для этого?

1 Ответ

0 голосов
/ 07 января 2020

В настоящее время мы используем подход, в котором мы используем службу переднего плана, чтобы поддерживать соединение, даже когда приложение уничтожено.

Android гарантирует, что службы переднего плана продолжают работать и если убит, начинает их снова скоро. Однако для служб переднего плана требуется публиковать заметки о том, что для постоянно работающего фонового приложения это может раздражать. Есть другой способ! Вы можете запросить Android, чтобы игнорировать оптимизацию батареи для вашего приложения. Проигнорированные приложения оптимизации батареи освобождаются от фоновых ограничений Android O + и могут запускать обычные службы (не службы переднего плана) в любое время.

Проблема заключается в том, что длительная работа службы разряжает батарею так быстро.

Служба не разряжает батарею, а сетевая активность разряжает батарею. Сетевая активность происходит из свойства keepalive MQTT. Также обратите внимание, что потребление батареи также сильно зависит от базовой сетевой транспортной технологии. Wi-Fi потребляет меньше энергии, но сотовые сети потребляют гораздо больше энергии. Таким образом, для того чтобы поддерживать надежное соединение с брокером, а также снижать расход батареи, вы должны отказаться от поддержки активности от использования батареи. Вот хорошая статья для настройки параметра keepalive:

Поэтому я спрашиваю Возможно ли реализовать этот сценарий с WorkManager?

Нет, задания WorkManager являются однократными, Android планирует их и запускает в определенное время в будущем. В то же время процесс вашего приложения может быть прерван, и брокер отправит вам сообщение, затем вы получите сообщение, когда ваш JobService снова запустится, так что это больше не в режиме реального времени, теперь опрос не продвигается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...