Мое приложение имеет фоновый режим service
, который обновляет пользователей location
и обновляет его на сервере каждые пять минут.Чтобы непрерывно запускать процесс обновления location
, я использую диспетчер аварийных сигналов, чтобы установить время его следующего запуска из самого service
.Тем не менее, когда я устанавливаю приложение в моем Nokia 6
работающем Android 8.1
, оно работает некоторое время, и если я некоторое время не использую телефон, мой service
будет убит следующими сигналами тревоги, которые также удаляются из приложения.система alarm manager
.Я предположил, что простой заставляет телефон вводить doze mode
.Тем не менее, я не понимаю, почему менеджеры тревоги были очищены.Насколько я понимаю, doze mode
должен периодически открывать окна обслуживания для выполнения любых ожидающих выполнения задач.
Чтобы смягчить эту проблему, я попытался применить JobScheduler
service
поверх AlarmManager
, чтоработает каждые 15 минут.Цель этого jobscheduler
состояла в том, чтобы перезапустить service
, в котором есть alarmmanager
, поэтому, даже если он будет убит и сигнал тревоги сброшен, jobscheduler
снова включит service
.
После того, как я протестировал этот патч и удерживал его в течение некоторого времени, чтобы перейти к idle mode
, он привел к получению как JobScheduler
Service
, так и Service
, в котором есть аварийный сигнал, с запланированными заданиями.и сбрасывание аварийных сигналов из системы.
В документации Android сказано, что мы можем использовать JobScheduler
, чтобы смягчить ограничения фонового выполнения.И чтобы проверить это, я принудительно убил два services
, когда я тестировал приложение, но уже запланированное задание не было очищено, и он заставил service
с сигналом тревоги снова запуститься.Я не понимаю причину такого поведения, хотя ребята из Evernote дают объяснение, которое могло бы соответствовать этому сценарию здесь Android Job от Evernote
Есть идеи для такого ненормального поведения?
Сведения о тестовой среде
- Устройство:
Nokia 6 (TA-1021)
- ОС:
Android 8.1.0