Я должен использовать PendingIntent.getService () или getBroadcast с AlarmManager? - PullRequest
40 голосов
/ 05 сентября 2011

Мое приложение должно получать некоторые данные из Интернета в определенное время каждый день. Поэтому я использую 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);

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

Ответы [ 2 ]

19 голосов
/ 05 сентября 2011

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

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

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

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

13 голосов
/ 10 октября 2013

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...