Вам не нужно несколько версий вашего приложения, вам просто нужно несколько реализаций «планировщика», каждая из которых содержит всего пару файлов, и все они вызывают одну и ту же логику приложения.
- Включение сигналов тревоги в точное время (с точностью до секунды)
Ну, есть только один вариант, который обрабатывает это.Вам нужен AlarmManager.setExact.Это настоятельно не рекомендуется, потому что это приводит к разряду батареи.
- Может иметь несколько аварийных сигналов в системе (срабатывание в разное время).
Каждая опция там обрабатывает это, пока вы даете им разные идентификаторы.
- Должно пробуждать устройство, если оно спит, и держать его в активном состоянии, пока пользователь не выполнит определенную задачу.
Звучит так, как будто вам нужно, чтобы ваш тревожный вызов Context.StartForegroundService оставлял эту службу переднего плана работающей, пока пользователь не выполнит задачу.Опять же, это не рекомендуется, потому что это расходует заряд батареи.
- Должно работать на как можно большем количестве версий Android, по крайней мере от 4.0 и выше (тот факт, что вы можете использовать старый телефон для запуска этого приложенияявляется плюсом).
Службы AlarmManager и переднего плана работают на всех версиях Android, хотя требование запустить Службу переднего плана немного изменилось с Android O, концепция идентична.
Пока ваше приложение выполняет что-то важное, что должно выполняться ПРЯМО СЕЙЧАС, даже если экран выключен, вам следует захватить блокировку.Функция wakelock не позволяет процессору приостанавливаться, чтобы вы могли обработать то, что необходимо немедленно.Если код может подождать, пока не включится экран, пожалуйста, не используйте пробуждение от блокировки.JobService всегда захватывает wakelock, поэтому коду JobService не нужно захватывать отдельный wakelock.Если у вас нет запущенной службы, включая JobService, то Android случайным образом остановит ваше приложение, даже если у вас есть пробуждение.Таким образом, вам всегда нужна какая-то услуга при выполнении любой важной работы.