Должен ли я использовать PendingIntent.getService () или getBroadcast с AlarmManager?

Мое приложение должно каждый день получать данные из Интернета в определенное время. Поэтому я использую AlarmManager для планирования задачи и работает нормально.

Но, глядя на различные примеры, кажется, есть два способа справиться с AlarmManager, когда дело доходит до ожидающего намерения.

Один из них использует PendingIntent.getBroadcast() для вызова широковещательного приемника, когда будильник отключается, и внутри этого приемника запускается служба для выполнения реальной работы.

Другим подходом является использование PendingIntent.getService() и вызов службы непосредственно при отключении этого сигнала.

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

РЕДАКТИРОВАТЬ: Еще один вопрос: где можно приобрести блокировку после использования getService ()?

Например, при использовании BroadcastReceiver у меня есть следующая строка в onReceive ():

 WakeReminderIntentService.acquireStaticLock(context); 

Как я должен получить блокировку бодрствования, если я вместо этого позвоню службе, например:

 PendingIntent pi = PendingIntent.getService(this, 0, new Intent(this, OnAlarmReceiver.class), PendingIntent.FLAG_UPDATE_CURRENT); 

Должен ли я просто приобрести его изнутри службы?

Один из них использует PendingIntent.getBroadcast() для вызова broadcast receiver когда будильник отключается, и внутри этого приемника запускается служба для выполнения реальной работы.

Он имеет еще один шаг в начале обслуживания, чем

Другим подходом является использование PendingIntent.getService() и вызов службы непосредственно при отключении этого сигнала.

То вы должны использовать второй подход, поскольку он уменьшает ваш один шаг в выполнении.

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

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

Пример см. В этом вопросе .