Ответ 1
Если вы хотите пробудить приложение из состояния Doze (чтобы вы могли получать сообщения), используйте setAndAllowWhileIdle()
и setExactAndAllowWhileIdle()
.
Ваше приложение перешло в режим Doed, когда вы выполнили команду
adb shell dumpsys deviceidle force-idle
Следующие ограничения применяются к вашим приложениям во время Doze:
- Доступ к сети заблокирован.
- Система игнорирует блокировки слежения.
- Стандартные тревоги AlarmManager (включая setExact() и setWindow()) откладываются до следующего окна обслуживания.
- Если вам нужно установить аварийные сигналы, которые срабатывают во время Doze, используйте setAndAllowWhileIdle() или setExactAndAllowWhileIdle().
- Тревоги, установленные с помощью setAlarmClock(), продолжают нормально срабатывать - система выходит из Doze незадолго до того, как эти тревоги загорелись.
- Система не выполняет сканирование Wi-Fi.
- Система не позволяет запускать адаптеры синхронизации.
- Система не разрешает запуск JobScheduler
Ограничение Doze при доступе к сети также может повлиять на ваше приложение, особенно если приложение использует сообщения в режиме реального времени, такие как щекотки или уведомления. Если ваше приложение требует постоянного подключение к сети для приема сообщений, вы должны использовать Firebase Cloud Messaging (FCM), если это возможно.
Чтобы помочь в планировании аварийных сигналов, Android 6.0 (API-уровень 23) вводит два новых метода AlarmManager: setAndAllowWhileIdle() и setExactAndAllowWhileIdle(). С помощью этих методов вы можете установить аварийные сигналы который будет срабатывать, даже если устройство находится в режиме Doze.