Должен ли я использовать 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);
Должен ли я просто получить его изнутри службы?
Ответы
Ответ 1
Один использует PendingIntent.getBroadcast()
для вызова broadcast receiver
, когда будильник выключается, и внутри этого ресивера запускается служба для выполнения реальной работы.
у него есть еще один шаг при запуске службы, чем
Другим подходом является использование PendingIntent.getService()
и вызов службы непосредственно при отключении этого сигнала.
то вы должны использовать второй подход, поскольку он уменьшает ваш один шаг в выполнении.
Ответ 2
Считывая ваше редактирование, я предполагаю, что вы поняли: Если вы хотите, чтобы ваша служба запускалась при использовании AlarmManager
, вам лучше взять обход первой отправки в приемник и получить блокировку слежения там.
В противном случае возможно, что телефон будет спать до запуска запрошенной службы.
Это то, что говорит javadoc AlarmManager
, и я также прочитал его в сообщении Google.
Итак, теперь для вашего редактирования: когда нужно приобрести замок?
Весь смысл использования приемника состоит в том, чтобы получить блокировку в методе onReceive()
получателя, поскольку Android не заснет во время выполнения этого метода.
В качестве примера см. question.