Я должен выполнить этот вариант использования (не код, просто правильное использование) Вариант использования: Мне нужно получать данные из сети каждый день в 00:30. Эти данные дают мне определенное время, и одно из них около 4:30 (каждый день меняется на +1 минуту -1 минуту, зависит от ответа сервера, нигде нельзя использовать логику ++ или --). На этот раз (4:30) мне нужно запланировать будильник. Что непонятно:
Должен ли я использовать для этого AlarmManager напрямую?
Должен ли я использовать WorkManager, чтобы получить время, когда мне нужно подать сигнал тревоги, а затем использовать AlarmManager?
Должен ли я просто использовать WorkManager ?
Причина, по которой я запутался, заключается в том, что в некоторых блогах, которые я читал, говорится, что лучше придерживаться AlarmManager, если у меня есть какая-то работа в определенное время, но тем не менее я могу сделать это с помощью WorkManager.
Итак, как это делается?
Should I use AlarmManager directly for this ?
Да, ты должен. Насколько я знаю, AlarmManager — лучший вариант для решения таких задач, как ваша, а также более безопасный вариант при работе с дремлющий режим. Используйте первый будильник, чтобы установить второй будильник на определенное время.
Should I use WorkManager to get the time when I need to alarm and than use AlarmManager ?
Если вы хотите использовать этот подход, вам нужно вызвать AlarmManager и отправить Worker на WorkManager. WorkManager необходимо запустить до определенного времени, и нет гарантии, что Worker завершится или будет выполнен до 4.30.
The reason why I am confused is because some blogs I have read say that is better to stick to AlarmManager if I have some work at a specific time, but still, I can do it with WorkManager
WorkManager не гарантирует время выполнения. Возможно, это удастся сделать в будущем.
Should I just use WorkManager ?
Нет, по причинам, изложенным ранее. Android-работа — это краткосрочный ответ вашего варианта использования, если вы хотите использовать планировщик заданий. Также вы можете увидеть таблицу особенностей и отличий, если перейдете по ссылке.
Редактировать 17.03.2020:Android-работа устарел.
Правильно ли вы устанавливаете параметры диспетчера тревог? Вы уверены, что правильно переназначили будильник? Какую версию Android вы используете для тестирования? Поведение и правила для сигналов тревоги строго связаны с версиями Android, аналогично фоновой обработке. Откройте вопрос и приведите пример или несколько фрагментов кода. Проверьте документы также на: developer.android.com/training/scheduling/alarms
Я правильно передал все параметры. Я тестирую его на 7.1, и проблема в спящем режиме. Когда приложение убито, мое приложение не запускает сигнал тревоги.
WorkManager
сидеть поверх нескольких API, один из них AlarmManager
, почему WorkManager
поверх AlarmManager
недостаточно?
Это зависит от того, чего вы хотите достичь. WorkManager, кажется, не реализован для выполнения задач в точное время (я думаю, что эта функция будет реализована в будущем). Если вы перейдете к developer.android.com/guide/background , рекомендуемым способом выполнения заданий точного времени будет AlarmManager, а для всех других вариантов использования вы можете использовать WorkManager. Больше информации здесь developer.android.com/topic/libraries/architecture/workmanager. Вы можете попробовать создать простое приложение для проверки этих различий (поведение немного отличается в зависимости от версии Android).
@ChiragPrajapati проверьте здесь stackoverflow.com/questions/28140219/…. Возможно, вам нужно сделать какую-то другую модификацию, если вы используете версию Android, которая новее Android 8 (например, службы переднего плана). Надеюсь, это поможет.
Я использовал диспетчер тревог, чтобы запустить тревогу и открыть действие A. Это работает. Но когда я переназначаю будильник через 5 минут, он больше не срабатывает. В чем проблема? Не могли бы вы мне помочь?