Проблема с JobScheduler Android Oreo

В моем текущем приложении для компании у меня есть служба ForegroundService, которая работает, пока работники дежурят (вошли в приложение). Важно, чтобы эта служба переднего плана работала, когда пользователи вошли в систему. Чтобы восстановиться после случаев, когда эта служба переднего плана каким-либо образом отключается (случайное пролистывание задачи пользователя или уничтожение системы), я реализовал периодическую ЗАДАНИЕ с Jobscheduler, который повторно активирует ForegroundService в случае, если он получает неисправность. Этот метод хорошо работает до Android 8 OREO. START_STICKY и другие методы сами по себе не помогли мне.

В Android 8, как только служба переднего плана будет уничтожена, периодическое задание также будет уничтожено. Я получаю уведомление в logcat о том, что задание не разрешено запускать. Насколько я понимаю, Джобс должен работать, даже когда приложение находится в фоновом режиме или убито. И он работает на устройствах до OREO так, как должен.

Насколько мне известно, я могу исправить это, включив опцию «автозапуск» в настройках приложения. Но поскольку нет никакого способа узнать, включили ли это сотрудники, это также ненадежно.

Итак, мои вопросы: - Почему планировщик заданий перестает работать должным образом в Android 8? - Существуют ли какие-либо другие надежные методы, которые я мог бы использовать для восстановления ForegroundService после завершения работы в ANDROID OREO?

Я прочитал https://medium.com/exploring-android/exploring-background-execution-limits-on-android-oreo-ab384762a66c, но это не ответило на мои вопросы

Большое тебе спасибо


person Al Cabone    schedule 23.08.2018    source источник
comment
Я знаю, что не помогаю напрямую с вашим вопросом, но для вашей реализации потребуется постоянно работающий сервис (не так уж здорово). Возможно, вы могли бы отредактировать и объяснить больше своих потребностей, я уверен, что есть лучший способ.   -  person shkschneider    schedule 23.08.2018
comment
Мне требуется отслеживание GPS, когда работник вошел в приложение, так как они доставляют товары клиентам. Клиент хочет знать, где добро. Моя первая реализация была без службы переднего плана, вместо этого использовались задания для периодической отправки GPS-координат на наш сервер. Но это было менее надежно из-за кастомных андроидов XIAMOMI и HUAWAI. Боль в заднице   -  person Al Cabone    schedule 23.08.2018
comment
Я знаю, что пользовательские ПЗУ могут быть проблемой, но я чувствую, что ваша предыдущая реализация была правильной.   -  person shkschneider    schedule 23.08.2018
comment
Да :/ . Предыдущая реализация была ненадежной из-за спящего режима и оптимизации батареи. Для моего варианта использования этой реализации было недостаточно, так как иногда даже на стандартном Android я получал обновление GPS только раз в 3 часа и т. д. из-за дремоты. Но требовать это каждые 15 минут.   -  person Al Cabone    schedule 23.08.2018


Ответы (2)


ты пытался поставить

                .setPersisted(true)

Примечание. Требуется разрешение RECEIVE_BOOT_COMPLETED.

вы также можете увидеть этот вопрос.

Планировщик заданий не работает на Android N

person Momen Zaqout    schedule 23.08.2018
comment
Да, я пробовал это, и это не сработало для меня, к сожалению. Планировщик заданий не работает на Oreo. Но спасибо! - person Al Cabone; 23.08.2018

чтение некоторых ссылок:

1- Службы в andreo oreo, если у них есть жук, oreo убьет его из-за потери энергии в 7 - это предупреждение, но в 8 применяются более строгие меры.

2 - Планировщик заданий имеет время 15 минут, и avaces не выполняются в точное время дебета, что они ищут точный момент для выполнения события без того, чтобы батарея сотового была разряжена.

Я рекомендую вам использовать эту библиотеку, которая предоставляет Evernote, которая очень хороша и очень специфична:

https://github.com/evernote/android-job

person Leandro Castillo Borja    schedule 09.09.2018