Android переносит фоновую службу в планировщик заданий

у нас есть проект, который использует фоновую службу для получения событий в реальном времени с сервера. мы используем соединение через веб-сокет для получения данных. но теперь в Android Oreo или выше ОС начинает показывать предупреждение о батарее.

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

Я попробовал планировщик заданий, и он предлагает повторяющиеся вызовы. но наше соединение работает в режиме реального времени, поэтому, если планировщик заданий останавливается, мы не получаем данные. так как другие приложения справляются с этим (пример WhatsApp)

как лучше всего поддерживать наше соединение и получать данные?

заранее спасибо


person Community    schedule 03.06.2018    source источник


Ответы (1)


меня беспокоит то, что если мы перейдем к планировщику заданий, он остановится через какое-то время.

Да. В спящем режиме все запланированные задания откладываются до тех пор, пока ОС не предоставит окно обслуживания.

как лучше всего поддерживать наше соединение и получать данные?

Вы не должны поддерживать постоянное соединение с вашим сервером и постоянно запускать фоновую службу. Начиная с Android O, вы не сможете запускать службы в фоновом режиме. ОС прекратит работу всех служб, и любые попытки запустить службу в фоновом режиме приведут к IllegalStateException

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

person Sagar    schedule 03.06.2018
comment
да .. но мы не можем использовать fcm. но как такие приложения, как WhatsApp, сохраняют свои услуги в фоновом режиме? - person ; 03.06.2018
comment
@user332863 user332863 Они не поддерживают постоянную связь. Они также полагаются на FCM. Однако такие приложения, как WhatsApp, могут быть добавлены в белый список. Вы можете проверить этот документ, в котором описывается, как внести в белый список ваше приложение. - person Sagar; 04.06.2018
comment
@ user332863 вы проверили мой ответ из этого SO и этот ТАК - person Sagar; 04.06.2018
comment
так что в этом случае мы должны использовать какой-то механизм опроса, верно? потому что, если мы используем WS-соединение, а ОС завершает службу, мы можем пропустить события. если мы используем планировщик заданий, как часто мы можем вызывать наш запрос на опрос. (Наш вариант использования работает только в том случае, если сеть активна, поэтому мы можем использовать ограничения API заданий) - person ; 04.06.2018
comment
@user332863 user332863 минимальный период, необходимый для JobScheduler, составляет около 15 минут, т. е. ваше задание будет выполняться только один раз в 15 минут. Поведение в режиме Doze зависит от ОС, и вы не можете его контролировать. Вы можете использовать AlarmManager, который может запускаться в определенное время. - person Sagar; 04.06.2018
comment
это ограничение в 15 только в спящем режиме, верно? так что иначе мы можем объединить AlarmManager и JobScheduler для выполнения соединения с определенным интервалом, верно? - person ; 04.06.2018
comment
@user332863us user332863us this 15 limit is only in doze mode right? Нет. При использовании периодического задания ограничение не зависит от режима ожидания. Вы можете использовать его, если это не критично, в противном случае используйте AlarmManager для запуска запроса в определенное время. Вы также можете попробовать внести свое приложение в белый список. - person Sagar; 04.06.2018