WorkManager vs AlarmManager, что использовать в зависимости от случая

Я должен выполнить этот вариант использования (не код, просто правильное использование) Вариант использования: Мне нужно получать данные из сети каждый день в 00:30. Эти данные дают мне определенное время, и одно из них около 4:30 (каждый день меняется на +1 минуту -1 минуту, зависит от ответа сервера, нигде нельзя использовать логику ++ или --). На этот раз (4:30) мне нужно запланировать будильник. Что непонятно:

Должен ли я использовать для этого AlarmManager напрямую?

Должен ли я использовать WorkManager, чтобы получить время, когда мне нужно подать сигнал тревоги, а затем использовать AlarmManager?

Должен ли я просто использовать WorkManager ?

Причина, по которой я запутался, заключается в том, что в некоторых блогах, которые я читал, говорится, что лучше придерживаться AlarmManager, если у меня есть какая-то работа в определенное время, но тем не менее я могу сделать это с помощью WorkManager.

Итак, как это делается?

34
0
11 947
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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-работа устарел.

Я использовал диспетчер тревог, чтобы запустить тревогу и открыть действие A. Это работает. Но когда я переназначаю будильник через 5 минут, он больше не срабатывает. В чем проблема? Не могли бы вы мне помочь?

Chirag Prajapati 16.03.2020 14:28

Правильно ли вы устанавливаете параметры диспетчера тревог? Вы уверены, что правильно переназначили будильник? Какую версию Android вы используете для тестирования? Поведение и правила для сигналов тревоги строго связаны с версиями Android, аналогично фоновой обработке. Откройте вопрос и приведите пример или несколько фрагментов кода. Проверьте документы также на: developer.android.com/training/scheduling/alarms

TomD88 17.03.2020 14:11

Я правильно передал все параметры. Я тестирую его на 7.1, и проблема в спящем режиме. Когда приложение убито, мое приложение не запускает сигнал тревоги.

Chirag Prajapati 17.03.2020 14:30
WorkManager сидеть поверх нескольких API, один из них AlarmManager, почему WorkManager поверх AlarmManager недостаточно?
Pavel Poley 16.12.2020 14:42

Это зависит от того, чего вы хотите достичь. WorkManager, кажется, не реализован для выполнения задач в точное время (я думаю, что эта функция будет реализована в будущем). Если вы перейдете к developer.android.com/guide/background , рекомендуемым способом выполнения заданий точного времени будет AlarmManager, а для всех других вариантов использования вы можете использовать WorkManager. Больше информации здесь developer.android.com/topic/libraries/architecture/workmanager. Вы можете попробовать создать простое приложение для проверки этих различий (поведение немного отличается в зависимости от версии Android).

TomD88 24.12.2020 12:12

@ChiragPrajapati проверьте здесь stackoverflow.com/questions/28140219/…. Возможно, вам нужно сделать какую-то другую модификацию, если вы используете версию Android, которая новее Android 8 (например, службы переднего плана). Надеюсь, это поможет.

TomD88 24.12.2020 12:16

Другие вопросы по теме