Как сохранить работу службы в фоновом режиме в Android O?

Мне нужно, чтобы служба работала в фоновом режиме. Эта служба используется для поддержания соединения Socket.IO/MQTT. В версиях, предшествующих Android O, не было проблем с поддержанием работоспособности службы, но в Android O это невозможно из-за ограничения фонового исполнения.

Есть ли способ сохранить работу служб, кроме службы переднего плана?

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

TomH 07.07.2018 00:21

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

Pawel 07.07.2018 00:23

Ваша служба может работать в фоновом режиме для 5 секунд, прежде чем вам нужно будет прикрепить к ней уведомление. Возможно, вы захотите прочитать все о Фоновые ограничения Android O

Sourabh 07.07.2018 19:34

вы решаете эту проблему? @Mariano Cordoba

Revathi Manoharan 02.08.2018 08:47

@RevathiManoharan нет. Я использую службу переднего плана для постоянных подключений и workmanager для задач, которые выполняются с фиксированной скоростью.

Mariano Córdoba 02.08.2018 16:42

Хорошо, давайте попробуем также jobIntent. Но мое устройство redmi note pro работает, когда приложение полностью закрыто, я попытался нажать уведомление, затем мое приложение проснулось .. Это было достигнуто без использования намерения работы здесь, я использовал только startForegroundService. Но тот же сценарий не работает в One plus device.i думал, что это проблема конкретных устройств. так что вам нужно попробовать и другие устройства Android

Revathi Manoharan 02.08.2018 16:47

В redmi note 5 pro, когда приложение находится в фоновом режиме, когда я пробовал push-уведомление, оно работает

Revathi Manoharan 02.08.2018 16:48
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
7
7
868
1

Ответы 1

Вы должны использовать Firebase Cloud Messaging для отправки данных с сервера, чтобы все приложения не открывали собственное соединение и не оставались активными, разряжая батарею и заполняя оперативную память без всякой пользы для пользователя. Ваше приложение не должно быть исключением.

Для коротких соединений (минуты) или пользовательских сеансов (также минут, если пользователь не остается активным дольше), служба переднего плана может быть решением.

Из любопытства, как вы хотите использовать «постоянное соединение»?

Мне нужно отслеживать присутствие пользователя. Я не думаю, что FCM поможет в этом случае, вероятно, лучший выбор - использовать службу переднего плана.

Mariano Córdoba 30.03.2019 18:17

Что вы считаете «присутствием пользователя»?

Louis CAD 30.03.2019 19:43

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

Louis CAD 30.03.2019 19:44

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

Mariano Córdoba 31.03.2019 17:37

Это не ответ на мой первый вопрос. Я могу перефразировать это так: когда вы считаете, что пользователя больше нет в сети, а когда вы считаете, что он снова в сети?

Louis CAD 31.03.2019 18:06

Другие вопросы по теме