Загрузка ЦП службой переднего плана с обработчиками

Как я могу убедиться, что служба переднего плана может использовать ЦП, когда приложение закрыто, когда экран заблокирован и когда активен режим ожидания?

Существуют потоки обработчиков, в которых я планирую задачи с помощью метода postdelayed в службе переднего плана. Я перечисляю свои тестовые случаи:

  1. Частичная блокировка пробуждения в службе переднего плана:
    обработчики никогда не задерживают.
  2. Нет wakelock, устройство подключено через adb:
    Обработчики никогда не задерживают.
  3. Нет wakelock, приложение на экране:
    Обработчики никогда не задерживают.
  4. Нет wakelock, приложение в фоновом режиме, приложение не уничтожено:
    Обработчики могут задержаться.
  5. Нет пробуждения, экран включен, приложение уничтожено:
    Обработчики могут задержаться.
  6. Нет wakelock, экран заблокирован:
    Обработчики всегда задерживают по незнанию.
  7. Нет wakelock, активна дремота:
    Обработчики всегда задерживают по незнанию.

В документации мало говорится об ограничениях использования процессора для служб переднего плана. Есть ли ошибки, связанные со службами переднего плана?


person Mertcan Çüçen    schedule 06.04.2018    source источник
comment
вам нужно создать ожидающее намерение или несвязанную службу   -  person Deepak kaku    schedule 07.04.2018
comment
службы переднего плана освобождены от дремоты   -  person Tim    schedule 07.04.2018
comment
Да, они освобождены от дремоты, что означает, что Android с меньшей вероятностью завершит службу, даже если он находится в спящем режиме. Однако похоже, что потоки никогда не получают процессорное время.   -  person Mertcan Çüçen    schedule 16.04.2018


Ответы (1)


Обработчик postDelayed() ведет себя так, как ожидалось. На основе документации из postDelayed():

Вызывает добавление Runnable r в очередь сообщений для запуска по истечении указанного времени. Runnable будет запущен в потоке, к которому прикреплен этот обработчик. Временная база — это uptimeMillis(). Время, проведенное в глубоком сне, добавит дополнительную задержку к выполнению

person Sagar    schedule 07.04.2018
comment
Спасибо, что указали на это. Теперь я использую Timer и Timetasks внутри службы переднего плана, но она по-прежнему не срабатывает вовремя, когда телефон переходит в режим дозы. Как я могу убедиться, что моя служба переднего плана может использовать процессор по желанию? - person Mertcan Çüçen; 16.04.2018
comment
Если вы хотите, чтобы ваша служба могла использовать ЦП в спящем режиме, вы можете приобрести PartialWakeLock, обеспечивающий работу процессора; подсветка экрана и клавиатуры будет отключена. - person Sagar; 17.04.2018