Подтвердить что ты не робот

Должен ли я использовать 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);

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

4b9b3361

Ответ 1

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

у него есть еще один шаг при запуске службы, чем

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

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

Ответ 2

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

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

В качестве примера см. question.