2015-01-24 6 views
0

Я хочу выполнить некоторую задачу (например, показать уведомление) по расписанию, например: 10:00 каждый день и 11:00 каждый понедельник и т. Д., Я не могу использовать AlarmManager, потому что временной интервал между задачами отличается и Я не могу запускать задачу каждую N секунду. Могу ли я указать несколько задач для AlarmManager? Как я могу это сделать и что я должен использовать?Как запустить задачу по расписанию в android?

ответ

1

Я не могу использовать AlarmManager, потому что интервал времени между задачами отличается

Да, вы можете.

Один из вариантов - использовать различные аварийные сигналы для различных задач. В вашем примере у вас будет один сигнал тревоги для «10:00 каждый день» и отдельно будильник для «11:00 каждый понедельник».

Другой вариант - использовать один сигнал тревоги для следующего, где он будет делать то, что делает ваша бизнес-логика (например, напоминать пользователю о событии), а затем рассылает следующий сигнал тревоги для следующего события. Например, используя мой часовой пояс, сейчас 07:45 в субботу. У вашего приложения будет сигнал тревоги AlarmManager, чтобы получить контроль в 10:00 («10:00 каждый день»). Когда этот сигнал будет вызываться, он будет планировать будильник AlarmManager на 10:00 в воскресенье («10:00 каждый день»). 10:00 в воскресенье, он будет планировать будильник на 10:00 понедельника («10:00 каждый день»). 10:00 в понедельник, он будет планировать будильник на 11:00 понедельника («11:00 каждый понедельник»). 11:00 в понедельник, он будет планировать будильник на 10:00 вторника. И так далее.

Если есть только несколько правил, я бы пошел с первым вариантом. Если бы не было N возможных правил, я бы пошел со вторым вариантом, чтобы не наводнять AlarmManager.

Могу ли я указать несколько задач для AlarmManager?

Да. Убедитесь, что объекты PendingIntent отличаются. Самый простой способ сделать это - использовать уникальные значения для параметра requestCode до PendingIntent заводских методов, таких как getBroadcast().

+0

Благодарим вас, @CommonsWare! Я написал это с помощью нескольких 'PendingIntent', и он работает так, как я ожидал! –

Смежные вопросы