Начать активность с помощью AlarmManager, без Broadcastreceiver

Я надеюсь, что у кого-то есть ответ для меня:

Интересно, возможно ли (и распространено) использовать AlarmManager для непосредственного запуска Activity. Документация не объясняет это явно. Он описывает только использование широковещательных приемников.

Если можно запустить мою активность напрямую, где я получу намерение (onNewIntent)?

Большое спасибо, Жан-Пьер.


person Jean-Pierre    schedule 10.07.2011    source источник


Ответы (1)


Интересно, возможно ли (и распространено) использовать AlarmManager для непосредственного запуска Activity.

Да.

Документация не объясняет это явно. Он описывает только использование широковещательных приемников.

Использование BroadcastReceiver является наиболее распространенным сценарием. Это необходимо для _WAKEUP будильников, если вы хотите, чтобы устройство надежно просыпалось при срабатывании будильника.

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

Если можно запустить мою активность напрямую, где я получу намерение (onNewIntent)?

По умолчанию будет создан новый экземпляр действия. Если вы используете FLAG_ACTIVITY_CLEAR_TOP и FLAG_ACTIVITY_SINGLE_TOP, он перенесет существующий экземпляр действия, и вы получите Intent в onNewIntent().

Этот пример проекта демонстрирует использование AlarmManager таким образом. Этот пример проекта демонстрирует настраиваемые пользователем Activity-или-Notification когда сработает будильник. Оба они относительно глубоки в серии руководств, поэтому приложения немного сложны.

person CommonsWare    schedule 10.07.2011
comment
Даже если я опоздаю с ответом. Спасибо за ответ. Это мне очень помогло :) - person Jean-Pierre; 20.07.2011
comment
Таким образом, это означает, что когда AlarmManager пробуждает BroadcastReceiver и я хочу выполнять свою работу в его onReceive(), мне не нужно удерживать блокировку пробуждения, верно? - person jakk; 20.03.2012
comment
@jakk: Да, но имейте в виду, что onReceive() вызывается в основном потоке приложения для вашего процесса, поэтому ваша работа должна быть очень быстрой. - person CommonsWare; 20.03.2012