Запланированные задачи в службе переднего плана не работают по расписанию, когда приложение для Android переходит в фоновый режим - PullRequest
0 голосов
/ 12 мая 2019

У меня есть собственное приложение реагирования, которое делает вызов к модулю Android, который я написал.Этот собственный модуль запускает службу на переднем плане, показывающую уведомление пользователю.Я сделал это, потому что я хочу, чтобы моя служба работала, даже когда приложение переходит в фоновый режим или экран отключен на телефоне.В рамках моей службы я планирую 2 задачи, используя ScheduledExecutorService.Ниже приведен мой код из onStartCommand в моем классе обслуживания.

Запуск «RunScanTask» запланирован на 0 секунд и будет выполняться каждые 13 секунд после этого.«StopScanTask» планируется запустить через 8 секунд и запускать каждые 13 секунд после этого.Это прекрасно работает, когда мой экран включен.Однако, когда я выключаю дисплей, задания либо вообще прекращаются, либо выполняются с интервалами, которые являются совершенно случайными.Есть ли способ заставить их работать правильно даже при выключенном дисплее?

final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

ScheduledFuture<?> startScanFuture = scheduler.scheduleAtFixedRate(runScanTask, 0, 13, TimeUnit.SECONDS);
ScheduledFuture<?> stopScanFuture = scheduler.scheduleAtFixedRate(stopScanTask, 8, 13, TimeUnit.SECONDS);

Runnable stopScanTask = new Runnable() {
   public void run() {
      Log.d("main", "STOP BLE SCAN");
   }
};

Runnable runScanTask = new Runnable() {
   public void run() {
      Log.d("main", "RUN BLE SCAN");
   }
};

1 Ответ

0 голосов
/ 04 июля 2019

Когда ваш экран выключен, ваше устройство переходит в режим ожидания, если процессор ничего не делает.Выполните одно из следующих решений:

1- Получите частичную блокировку пробуждения на onCreate вашего сервиса, но это плохо для батареи.

2- Используйте AlarmManager's setAndAllowWhileIdle или setExactAndAllowWhileIdle .(минимальный период между заданиями 9 минут при активной глубокой дозе)

3- WorkManager (минимальный период между заданиями 15 минут)

4- JobScheduler (минимальный период между заданиями 15 минут)

5- Android-Job * библиотека 1020 *.

В этой статье описана дилемма, с которой вы столкнулись.

...