Переходит ли устройство в спящий режим во время работы службы переднего плана

Мое приложение должно работать в фоновом режиме в течение длительного времени и периодически отправлять данные на сервер. Я пробовал AlarmManager, но в спящем режиме он ограничен. Следующая мысль - это служба переднего плана.

Переходит ли устройство в спящий режим во время работы службы переднего плана?

Если устройство переходит в спящий режим, ограничено ли подключение к Интернету во время работы службы переднего плана?


person jarly    schedule 30.06.2017    source источник


Ответы (1)


У меня это работает очень хорошо, протестировал несколько часов непрерывной работы с некоторыми эмуляторами и реальными устройствами Android 6.0 и 7.1, сетевое соединение никогда не терялось:

В основном действии onPause я получаю частичный WakeLock и запускаю службу с намерением STARTFOREGROUND_ACTION, служба вызывает startForeground и показывает уведомление.

При действии onResume WakeLock освобождается, Служба останавливается с намерением STOPFOREGROUND_ACTION, а сама Служба вызывает stopForeground & stopSelf.

А также это позволяет избежать уничтожения Activity при нажатии клавиши Back:

 @Override
    public void onBackPressed() {
         moveTaskToBack(true);
    }

Конечно, я предоставляю пункт меню, чтобы остановить обработку фона и завершить действие.

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

Надеюсь, это поможет

person Lluis Felisart    schedule 30.06.2017
comment
Я не совсем понял ваше решение. Android Doze Mode игнорирует все блокировки пробуждения. - person jarly; 03.07.2017
comment
Не для меня с активным Foreground Service + Notification. Я уже тестировал на нескольких реальных устройствах. - person Lluis Felisart; 03.07.2017
comment
Подробно обсуждается здесь: stackoverflow.com/questions/37869201/ - person Lluis Felisart; 03.07.2017
comment
Даже при использовании службы переднего плана функции setExact и setExactAndAllowWhileIdle AlarmManager не работают в режиме дремоты. Через некоторое время после пробуждения устройства срабатывает AlarmManager. setAlarm работает в спящем режиме, но в строке состояния отображается значок будильника. Есть ли другой способ запланировать периодическое обслуживание? - person jarly; 05.07.2017
comment
Кажется, что для того, чтобы избежать перехода в режим Doze, служба переднего плана должна показывать уведомление ... - person Lluis Felisart; 05.07.2017