Разъяснение поведения AlarmManager в Android - PullRequest
6 голосов
/ 22 февраля 2011

Я вижу все примеры AlarmManager, устанавливаемых Activity.

Мой вопрос такой: Если мое приложение устанавливает повторяющийся AlarmManager, сохраняется ли оно даже после закрытия запущенного приложения и его удаления из памяти?

Если нет, то как запустить AlarmManager на более низком уровне, который запускается Android при загрузке, и если он когда-либо дает сбой, или умирает, или выдает исключение, перезапускается без необходимости что-либо делать пользователю?

Наконец, если действие, которое я хочу выполнить для BroadcastReceiver, не имеет визуальных компонентов, нужно ли мне создавать для него отдельное действие? В моем случае я хочу, чтобы был фоновый загрузчик, который просыпается и просматривает папку, а если он видит файлы в этой папке, отправляет их на сервер. Мне не нужна обратная связь с пользователем.

Итак, мой идеал - иметь магический, основанный на ОС AlarmManager, который вызывает IntentService, который просто обрабатывает загрузку, но мне неясно, как запустить такой AlarmManager.

1011 * ТИА *

Ответы [ 2 ]

11 голосов
/ 22 февраля 2011

Да, AFAIK аварийные сигналы «выживают» и продолжают срабатывать даже после завершения зарегистрированной активности.Но они не переживают перезагрузку телефона.

Если я правильно понимаю вашу проблему, думаю, вы сможете достичь того, что ищете, создав проект с приемником вещания, который прослушивает android.intent.action.BOOT_COMPLETEDнамерен и затем (повторно) зарегистрирует повторяющуюся тревогу, которая, в свою очередь, запускает (намеренную) службу для выполнения загрузки.

Вам не нужно действие, но вы, вероятно, все равно захотите его, чтобыпользователь временно отключил механизм загрузки, установив флажок или что-то в этом роде.Вероятно, было бы также неплохо позволить пользователю выбрать частоту вашего сигнала тревоги, то есть, как часто следует запускать службу и искать новые файлы для загрузки.Это также было бы хорошим местом для регистрации вашего будильника в первый раз.

1 голос
/ 22 февраля 2011

Я согласен с Николаем, что в вашем приложении будет 2 широковещательных приемника:

  • , который перерегистрирует сигнал тревоги при загрузке
  • , который запускает вашу службу при запускепо тревоге

Вы все еще можете иметь активность, но она не должна запускаться приемником тревоги (следовательно, службой): вместо этого, возможно, запустить уведомление при запуске службы с пользователемИмея возможность запустить действие из расширенного сообщения уведомления.

может также подумать о setInexactRepeating (вместо setRepeating) для вашего сигнала тревоги, а также об использовании рабочего потока для обработки длинных загрузок (в случае, еслипользователь хочет использовать вашу активность в главном потоке одновременно).

...