Отложенные действия и BroadcastReceiver

У меня есть случай, когда мне нужно запустить какое-то действие, не связанное с пользовательским интерфейсом, N секунд после того, как к устройству было подключено питание. Это действие также может быть запущено пользователем через пользовательский интерфейс.

У меня есть BroadcastReceiver, определенный в AndroidManifest.xml, который прослушивает ACTION_POWER_CONNECTED.

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

Я имею в виду два варианта:

  1. Однократная задача таймера. Однако я думаю, что это может быть неправильно, поскольку, согласно документам, я не мог запускать какие-либо асинхронные задачи из BroadcastReceiver.

  2. Услуга редизайна:

    • start action at onStartCommand, if action was triggered by user
    • запустить задачу таймера и выполнить действие по таймеру - та же логика, что и в 1, но внутри службы - если действие было вызвано трансляцией.

Я склоняюсь к 2. Это немного усложнит код, но, похоже, это единственный правильный путь.

-Лев


person lstipakov    schedule 11.07.2011    source источник


Ответы (1)


Правильный способ №2. Это потому, что как только вы покинете onReceive процесс приложения может быть убит. И ваш TimerTask в таком случае не поможет.

В качестве альтернативного решения используйте AlarmManager и его set для планирования ожидания служебное намерение. Это, вероятно, лучшее решение в вашем случае.

person inazaruk    schedule 11.07.2011