2013-04-18 2 views
0

Я хочу создать приложение для сигнализации. Я видел несколько примеров, и некоторые из них используют Сервис, а некоторые используют BroadcasterReceiver. Пользователь установит будильник, а затем, когда он погаснет, им придется делать определенные вещи, например, решить математическое уравнение или сканировать тег NFC до его отключения. Какой из них я должен использовать?Должна ли быть построена сигнализация с помощью службы или BroadcastReceiver?

ответ

3

Если вы используете AlarmManager с _WAKEUP сигнализации, вы должны иметь PendingIntent маршрут к BroadcastReceiver. Единственное, что гарантируют Android с сигналом _WAKEUP, - это если вы используете BroadcastReceiver, Android будет поддерживать устройство достаточно долго для завершения onReceive(). Все остальное, все ставки отключены.

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

+0

Я немного смущен. Вы говорите, что _WAKEUP работает только в том случае, если он отправлен в BroadcastReceiver, или вы говорите, что _WAKEUP * можно * отправить * на службу, но нет никакой гарантии, что устройство будет бодрствовать достаточно долго, чтобы сделать что-нибудь полезное? Во всяком случае, +1 для ссылки на WakefulIntentService. –

+0

@EdwardFalk: Ну, ваше второе утверждение более точное, хотя я считаю их более или менее эквивалентными. Какой смысл '_WAKEUP', если он будет ненадежным? – CommonsWare

+0

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