AlarmManager или JobScheduler совместим со всеми версиями Android? - PullRequest
0 голосов
/ 31 мая 2018

Мне нужна помощь, чтобы решить, какие классы принять в моем приложении, которые должны соответствовать этим требованиям:

  • Срабатывание сигналов тревоги в точное время (с точностью до секунды)
  • Может иметь несколько аварийных сигналов в системе (запускаться в разное время).
  • Должен пробуждать устройство, если оно спит, и держать его в активном состоянии, пока пользователь не выполнит определенную задачу.
  • Должен работать на таком количестве Androidверсии, насколько это возможно, по крайней мере от 4.0 и выше (тот факт, что вы можете использовать старый телефон для запуска этого приложения, является плюсом).

Я написал небольшую демонстрацию с AlarmManager & BroadcastReceiver, чтобыполучить представление о том, как все это работает.Я изучил документы для AlarmManager, BroadcastReceiver, WakefulBroadcastReceiver и JobScheduler, и хотя я понимаю различия, я не знаю, какие из них удовлетворят моим требованиям.

Из документации я получаюТакое впечатление, что мне может понадобиться написать несколько версий моего приложения, чтобы приспособиться к различным версиям Android, на которых оно будет работать.Это был бы кошмар!

Какие-либо предложения по поводу того, какие классы использовать?Я бы не хотел идти в одном заданном направлении, но потом узнал, что мне нужно все переписать.

Спасибо!

1 Ответ

0 голосов
/ 01 июня 2018

Вам не нужно несколько версий вашего приложения, вам просто нужно несколько реализаций «планировщика», каждая из которых содержит всего пару файлов, и все они вызывают одну и ту же логику приложения.

  • Включение сигналов тревоги в точное время (с точностью до секунды)

Ну, есть только один вариант, который обрабатывает это.Вам нужен AlarmManager.setExact.Это настоятельно не рекомендуется, потому что это приводит к разряду батареи.

  • Может иметь несколько аварийных сигналов в системе (срабатывание в разное время).

Каждая опция там обрабатывает это, пока вы даете им разные идентификаторы.

  • Должно пробуждать устройство, если оно спит, и держать его в активном состоянии, пока пользователь не выполнит определенную задачу.

Звучит так, как будто вам нужно, чтобы ваш тревожный вызов Context.StartForegroundService оставлял эту службу переднего плана работающей, пока пользователь не выполнит задачу.Опять же, это не рекомендуется, потому что это расходует заряд батареи.

  • Должно работать на как можно большем количестве версий Android, по крайней мере от 4.0 и выше (тот факт, что вы можете использовать старый телефон для запуска этого приложенияявляется плюсом).

Службы AlarmManager и переднего плана работают на всех версиях Android, хотя требование запустить Службу переднего плана немного изменилось с Android O, концепция идентична.


Пока ваше приложение выполняет что-то важное, что должно выполняться ПРЯМО СЕЙЧАС, даже если экран выключен, вам следует захватить блокировку.Функция wakelock не позволяет процессору приостанавливаться, чтобы вы могли обработать то, что необходимо немедленно.Если код может подождать, пока не включится экран, пожалуйста, не используйте пробуждение от блокировки.JobService всегда захватывает wakelock, поэтому коду JobService не нужно захватывать отдельный wakelock.Если у вас нет запущенной службы, включая JobService, то Android случайным образом остановит ваше приложение, даже если у вас есть пробуждение.Таким образом, вам всегда нужна какая-то услуга при выполнении любой важной работы.
...